今回はVBAマクロで二次元配列に格納したデータの一部を抽出する方法を紹介します。
うめ
二次元配列を使うと処理速度が速くなるので便利ですよー!
完成イメージ
まずはこのようなデータを二次元配列に格納。
名前データは「テストデータ・ジェネレータ」からお借りしています。
二次元配列から「No」、「名前」、「生年月日」だけを抜き出してSheet2に設定する処理になります。
コードはこちら
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Sub sample() Dim ws1 As Worksheet: Set ws1 = Worksheets("Sheet1") Dim ws2 As Worksheet: Set ws2 = Worksheets("Sheet2") 'Sheet1のデータを二次元配列に格納 Dim arr() As Variant: arr = ws1.Range("A1").CurrentRegion '必要なデータを抽出 Dim no() As Variant: no = WorksheetFunction.Index(arr, 0, 1) 'No Dim name() As Variant: name = WorksheetFunction.Index(arr, 0, 2) '名前 Dim code() As Variant: code = WorksheetFunction.Index(arr, 0, 5) '生年月日 'Sheet2にデータをセット With ws2 .Range("A1").Resize(UBound(no, 1), UBound(no, 2)) = no 'No .Range("B1").Resize(UBound(name, 1), UBound(name, 2)) = name '名前 .Range("C1").Resize(UBound(code, 1), UBound(code, 2)) = code '生年月日 End With End Sub |
コードの解説
最初に7行目のコードでSheet1の表全体をarr配列に格納します。
1 |
Dim arr() As Variant: arr = ws1.Range("A1").CurrentRegion |
10~12行目の「WorksheetFunction.Index(配列, 行番号,列番号)」を使用すると指定した配列から該当列のデータをまるごと抽出できます。
1 |
Dim no() As Variant: no = WorksheetFunction.Index(arr, 0, 1) |
最後に配列の最大範囲に調整してSheet2に設定します。
1 2 3 4 5 |
With ws2 .Range("A1").Resize(UBound(no, 1), UBound(no, 2)) = no 'No .Range("B1").Resize(UBound(name, 1), UBound(name, 2)) = name '名前 .Range("C1").Resize(UBound(code, 1), UBound(code, 2)) = code '生年月日 End With |
「Resize」+「UBound」の使い方を確認したい場合はこちら
まとめ
本記事では二次元配列の一部を抽出する方法について解説しました。
うめ
とりあえず二次元配列に格納した方がマクロの処理は早くなります!