セル範囲を一気に変数(配列)に入れる ~バリアント型(Variant)変数を配列として使用する~(Excel VBA)

【本日のミッション】

Excel VBAでセル範囲を一気に変数(配列)に格納し、その値を別のセル範囲に転記せよ。

ミッションの概要

セルB2~C12の範囲を一気に変数(配列)に格納し、その変数(配列)のデータを一気に別のセルに書き出す・・・というミッションです。

今回のサンプルはデータ範囲が小さいですが、ビッグデータでも手軽に格納できて配列として処理できるので、処理スピードが格段にアップします。

プロシージャ

Sub セル範囲を配列に格納()
    ’【変数】
    Dim ary_d
    
    ary_d = Range("B2:C12")
    Range("E2:F12") = ary_d
    
End Sub

記入したプロシージャ(Sub~End Subまで)のどこかにカーソルを置いてF5キーをクリックしてください。

Excelのシートを見てください。

値貼り付けしたかのごとく、値が転記されています。
配列を使って値を移動させただけなので、元表の罫線などの書式は反映されません。

なんと言っても、処理が早い!データ量が大きくなるほど実感します♪

■■■スポンサーリンク■■■

バリアント型(Variant)変数を配列として使用する

配列って難しくないですか?

  • 添え字が0から始まる。
  • モジュールの先頭に「Option Base 1」 としておくと、配列の添え字の最小値を1にすることができる。
  • 静的配列は、配列変数宣言時に要素数を指定する必要がある。

などなど、他にも色々ありますが・・・。学べば学ぶほど奥の深いものです。

そんな学び無しに、とりあえず実業務でパパっと使えるのが

「バリアント型(Variant)変数を配列として使用する」

なのです。

変数「ary_d」を、バリアント型(Variant)で宣言します。
データ型を省略すると、勝手にバリアント型(Variant)になります。

Dim ary_d

バリアント型変数に、セル範囲をそのまま入れちゃいます。

ary_d = Range("B2:C12")

この処理で36個のセルのテキスト・数字が、バリアント型変数 ary_d に格納され、配列になりました。(以下、配列ary_d と呼ばせていただきます。)

通常、配列は添え字が「0」から始まりますが、この方法で格納した場合、添え字は「1」から始まります。

添え字の始まりが「0」というのが苦手な方にはうれしいですよね。

下記右表は、データを配列ary_dに格納した時の、ary_dのインデックス番号になります。添え字が「1」から始まってますね。

上記プロシージャには無い処理ですが、データを配列ary_dに格納した後に

MsgBox ary_d(1, 2)

とすると、格納した表の1行目2列目の「数量」が表示されます。

配列ary_dに格納した後は、自由に配列内のデータを使用することができます。セル上のデータを処理するよりも格段にスピードアップです(#^.^#)

せっかく配列に入れたデータですが、今回はそのまま別のセルに書き出します。

Range("E2:F12") = ary_d

これまた簡単な処理ですね。

参考

Dictionary オブジェクト(連想配列) とは ビッグデータ高速処理を可能にする技 (Excel VBA)
セル範囲を一気に変数(配列)に入れる ~バリアント型(Variant)変数を配列として使用する~(Excel VBA)
重複しないユニークなリスト作成 ~Dictionaryオブジェクト(連想配列)を使う1~ (Excel VBA)
重複しないユニークなリスト作成 ~Dictionaryオブジェクト(連想配列)を使う2~ (Excel VBA)
Dictionary(連想配列)オブジェクト CreateObject関数を使う方法・ 参照設定を使う方法 違いを理解してエラー防止(Excel VBA)
表全体に格子罫線を簡単に引く(Excel VBA)

■■■スポンサーリンク■■■