Excel VBAで高速化を目指す時に役立つのが配列です。
最初はあまりイメージがつかめないかもしれませんが、何度も繰り返し使っていくとイメージができるようになっていくので諦めずに継続しましょう!
最初はコードのコピペでOKです~🙆
今回は配列にデータを格納して別シートに貼り付けるコードを紹介します。
やりたいこと
今回は配列を使用して「Sheet1」の会社情報を「Sheet2」に貼り付けます。
コードはこちら
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub Sample() Dim Array1 As Variant Dim Array2 As Variant '配列に格納 Array1 = Worksheets("Sheet1").Range("A1").CurrentRegion 'Resizeで配列を別シートに貼り付ける Worksheets("Sheet2").Range("A1").Resize(UBound(Array1, 1), UBound(Array1, 2)) = Array1 End Sub |
配列格納は「CurrentRegion」が便利
CurrentRegionプロパティを使うことで値が入力されているセルのデータ範囲を自動取得できます。
CurrentRegionプロパティを使わない場合は以下のように、格納する範囲を指定しないといけません。
小さな表であれば確認できますが、大きな表の場合はどこまでのセルを配列に格納するのか確認しないといけないので不便です。
セル範囲を指定すれば配列の格納はできますが、個人的にはあまりオススメしません。
配列に表全体を格納=「CurrentRegion」と覚えておきましょう!
CurrentRegionの注意点
空白行が含まれている表にCurrentRegionプロパティを使うとどうなるのか検証していきます。
Selectでどの部分が選択されるのか確認すると…
1 |
Worksheets("Sheet1").Range("A1").CurrentRegion.Select |
空白行の手前のA1~E4セルまでが選択されていました。
CurrentRegionプロパティは空白行のないデータにしか使えないので注意しましょう。
貼り付けは「Resize」+「UBound」を使用
UBoundを使うと配列の最大インデックス数を取得できます。
Resize(UBound(Array1, 1), UBound(Array1, 2))にどのようなデータが入ってくるのか見て行きましょう。
UBound(Array1, 1)⇒インデックス11
データが11行あるため
UBound(Array1, 2)⇒インデックスが5
データが5列あるため
配列を確認するとUBoundで取得した行と列のインデックス数が設定されていることがわかります。
さらに「Resize」と組み合わせることで配列の範囲を表の最大値に自動調整できます!
まとめ
今回は配列に格納したデータを別シートに貼り付けるやり方を紹介しました。
「CurrentRegion」、「Resize」+「UBound」を使いこなして効率的に作業を進めましょう!