業務改善 web開発 programming 旅行系記事多め。

【ExcelVBA】指定セル範囲内の値をそのまま高速に配列に入れる

ExcelVBAExcelVBA

ぱらげです。

A列値

上記のように指定のセル範囲にある値をそのまま配列に入れたくなることって多々ありますよね。
通常だとこの場合、A1~A5までをループさせて1セルずつ格納していく方法を思いつきますが、一気に配列に入れる方法があるんです。

ループを使わずできるため、動作としても高速化が実現できます。

Sub makeArray1()

Dim arr As Variant
arr = Sheets("Sheet1").Range("A1:A5")
Sheets("Sheet1").Range("B1:B5") = arr

End Sub

上記コードのように、variant型配列にそのまま範囲を指定して代入するだけで配列ができあがります。

試しに上記の処理を走らせてみましょう。

A列B列

A1~A5の範囲を配列(arr)に格納したあと、B1~B5にArrを反映しています。

これが例えば、A1~C5までを配列に入れたいという場合もそのまま(“A1~C5”)と指定するだけです。この場合の配列の中身は以下のようになります。

ウォッチ式中身

3列分を指定しているため3次元配列になっているのがわかります。

実際に(“D1:F5”)に配列の中身を反映させるコードは以下のようになります。
とても簡単ですね。

Sub makeArray1()

Dim arr As Variant
arr = Sheets("Sheet1").Range("A1:C5")
Sheets("Sheet1").Range("D1:F5") = arr

End Sub

処理を走らせると以下のようになります。

反映後

コメント

タイトルとURLをコピーしました