質問

VBAに飛び込み始めたばかりで、ちょっとした障害にぶつかりました。

50行以上、900行以上のデータを含むシートがあります。これらの列のうち約10列を再フォーマットし、新しいワークブックに貼り付ける必要があります。

book1の列内のすべての非空白セルをプログラムで選択して、いくつかの機能を実行し、book2に結果をドロップするにはどうすればよいですか

役に立ちましたか?

解決

次のVBAコードで開始できます。元のワークブックのすべてのデータを新しいワークブックにコピーしますが、各値に1を追加し、空白のセルはすべて無視されます。

Option Explicit

Public Sub exportDataToNewBook()
    Dim rowIndex As Integer
    Dim colIndex As Integer
    Dim dataRange As Range
    Dim thisBook As Workbook
    Dim newBook As Workbook
    Dim newRow As Integer
    Dim temp

    '// set your data range here
    Set dataRange = Sheet1.Range("A1:B100")

    '// create a new workbook
    Set newBook = Excel.Workbooks.Add

    '// loop through the data in book1, one column at a time
    For colIndex = 1 To dataRange.Columns.Count
        newRow = 0
        For rowIndex = 1 To dataRange.Rows.Count
            With dataRange.Cells(rowIndex, colIndex)

            '// ignore empty cells
            If .value <> "" Then
                newRow = newRow + 1
                temp = doSomethingWith(.value)
                newBook.ActiveSheet.Cells(newRow, colIndex).value = temp
                End If

            End With
        Next rowIndex
    Next colIndex
End Sub


Private Function doSomethingWith(aValue)

    '// This is where you would compute a different value
    '// for use in the new workbook
    '// In this example, I simply add one to it.
    aValue = aValue + 1

    doSomethingWith = aValue
End Function

他のヒント

私はこれに非常に遅れていることは知っていますが、ここにいくつかの有用なサンプルがあります:

'select the used cells in column 3 of worksheet wks
wks.columns(3).SpecialCells(xlCellTypeConstants).Select

または

'change all formulas in col 3 to values
with sheet1.columns(3).SpecialCells(xlCellTypeFormulas)
    .value = .value
end with

列で最後に使用された行を見つけるには、信頼性の低いLastCellに依存しないでください(データの削除後にリセットされません)。代わりに、

のような形式を使用します
 lngLast = cells(rows.count,3).end(xlUp).row

列の最後の行を探している場合は、次を使用します。

Sub SelectFirstColumn()
   SelectEntireColumn (1)
End Sub

Sub SelectSecondColumn()
    SelectEntireColumn (2)
End Sub

Sub SelectEntireColumn(columnNumber)
    Dim LastRow
    Sheets("sheet1").Select
    LastRow = ActiveSheet.Columns(columnNumber).SpecialCells(xlLastCell).Row

    ActiveSheet.Range(Cells(1, columnNumber), Cells(LastRow, columnNumber)).Select
End Sub

その他の慣れ親しむ必要があるコマンドは、コピーおよび貼り付けコマンドです:

Sub CopyOneToTwo()
    SelectEntireColumn (1)
    Selection.Copy

    Sheets("sheet1").Select
    ActiveSheet.Range("B1").PasteSpecial Paste:=xlPasteValues
End Sub

最後に、次の構文を使用して、他のワークブックのワークシートを参照できます。

Dim book2
Set book2 = Workbooks.Open("C:\book2.xls")
book2.Worksheets("sheet1")

これは完全にベースから外れているかもしれませんが、列全体を新しいスプレッドシートにコピーしてから列を並べ替えることはできませんか?注文の整合性を維持する必要はないと想定しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top