RangeやCellsだけで対象セルを特定できるのは、比較的簡単なケースです。実務はそんなに甘くありません。操作の対象セルを、縦横無尽に操るためには、どうしてもOffsetプロパティとResizeプロパティが必須です。この動画では、ビギナーが間違えやすいポイントや、Resizeを使うとマクロが速くなるケースをご紹介します。
↓左上にある
をクリックすると、チャンネル登録できます。ぜひ、チャンネル登録をお願いします。あなたのチャンネル登録が、私のやる気を維持向上してくれます(笑)
Sub Macro1()
Dim この範囲 As Range
Range("A1").AutoFilter 1, "田中"
Set この範囲 = Range("A1").CurrentRegion.Offset(1, 0)
この範囲.Resize(この範囲.Rows.Count - 1).Interior.Color = 255
Range("A1").AutoFilter
End Sub
Sub Macro2()
Range("A1").AutoFilter 1, "田中"
Range(Range("A2"), Cells(Rows.Count, 4).End(xlUp)).Interior.Color = 255
Range("A1").AutoFilter
End Sub
Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long
Sub Macro1()
Dim i As Long, ST As Long
ST = GetTickCount
With WorksheetFunction
For i = 2 To Range("A1").End(xlDown).Row
Cells(i, 2) = .VLookup(Cells(i, 1), Range("名前"), 2, False)
Cells(i, 3) = .VLookup(Cells(i, 1), Range("地域"), 2, False)
Cells(i, 4) = .VLookup(Cells(i, 1), Range("記号"), 2, False)
Cells(i, 5) = .VLookup(Cells(i, 1), Range("数値"), 2, False)
Next i
End With
Debug.Print (GetTickCount - ST) / 1000
End Sub
Sub Macro2()
Dim i As Long, A(3) As String, ST As Variant
ST = GetTickCount
With WorksheetFunction
For i = 2 To Range("A1").End(xlDown).Row
A(0) = .VLookup(Cells(i, 1), Range("名前"), 2, False)
A(1) = .VLookup(Cells(i, 1), Range("地域"), 2, False)
A(2) = .VLookup(Cells(i, 1), Range("記号"), 2, False)
A(3) = .VLookup(Cells(i, 1), Range("数値"), 2, False)
Cells(i, 1).Offset(0, 1).Resize(, 4) = A
Next i
End With
Debug.Print (GetTickCount - ST) / 1000
End Sub
動画で使用したブックのダウンロード(20200716.xlsm)
Office TANAKAのYouTubeチャンネルはこちら(動画一覧ページ)