私は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")