12

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

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

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

4

4 に答える 4

16

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

'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
于 2009-09-26T11:14:07.800 に答える
5

次の 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
于 2009-05-04T19:43:11.133 に答える
-1

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

于 2009-05-12T02:19:23.703 に答える