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チャンネルはこちら(動画一覧ページ)