セル範囲を一気に変数(配列)に入れる ~バリアント型(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)
重複しないユニークなリスト作成 ~Dictionaryオブジェクト(連想配列)を使う1~ (Excel VBA)
重複しないユニークなリスト作成 ~Dictionaryオブジェクト(連想配列)を使う2~ (Excel VBA)
Dictionaryオブジェクト(連想配列) CreateObject関数を使う方法・ 参照設定を使う方法 違いを理解してエラー防止(Excel VBA)
Dictionary オブジェクト(連想配列)に登録されたキー(key)をまとめて取得する(Excel VBA)
Dictionary オブジェクトに新しくキー(key)を登録し、値(item)を関連付ける(Excel VBA)
Dictionary オブジェクト 実行時エラー 457 を出さないために 指定したキー(key)が登録されているか確認する(Excel VBA)
Dictionary オブジェクト(連想配列)に登録されたキー(key)をインデックス番号から取得(Excel VBA)
Dictionary オブジェクト(連想配列)に登録されたキー(key)を変更する(Excel VBA)
Dictionary オブジェクト(連想配列)に登録された値(item)をまとめて取得する(Excel VBA)
Dictionary オブジェクト(連想配列)に登録された値(item)を、キー(key)やインデックス番号を指定して取得する(Excel VBA)
Dictionary オブジェクト(連想配列)に登録された値(item)を変更する(Excel VBA)
Dictionary オブジェクト(連想配列)に登録されたキー(key)と値(item)を削除(Excel VBA)
Dictionary オブジェクト(連想配列)に登録されたキー(key)を一気に取得する(Excel VBA)
セル範囲を一気に変数(配列)に入れる ~バリアント型(Variant)変数を配列として使用する~(Excel VBA)

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