セルデータを配列に一括代入する

配列にセルの入力内容を一括で代入させるコード

'セルデータの一括取得
Dim セルデータ As Variant
セルデータ = Range("A1:C3")

Valiant型の変数に、Rangeオブジェクトを代入することでそのセル範囲のデータを2次元配列データとして一括代入させることができます

Rangeオブジェクトを代入すると、Rangeオブジェクト自体が代入されるように感じる人もいるかもしれません
しかし、この代入にはLetステートメントが省略されており、本来省略しない形は以下のようになります

Let セルデータ = Range("A1:C3")

このLetステートメントは値の代入として認識されるため、セル範囲を指定してもRangeオブジェクトが代入されることはありません

逆にRangeオブジェクトを代入する場合には、Setステートメントを使用します

話を戻しますが、このように一括代入を行うと配列データに2次元配列としてセルのデータそのものが代入されます

取得するセル範囲のデータ
取得をおこなうセル範囲

この表のセルデータを一括で代入させます

取得した配列データ
代入された2次元配列のデータ

実際に2次元配列に取得された配列データです

これをそのまま他のセル範囲に一括出力することも出来ます
その場合は、Copyメソッドのほうが分かりやすいのであまり意味はありませんが可能です

ここで取得したデータを別の2次元配列に加工しながら取得させて、最終的にその加工した2次元配列をセル範囲に一括出力します

こうすることで、セル上で加工を行わない分、処理の高速化が図れますし、元のセルデータを改変してしまうこともありません

また、この方法での配列への代入は例え1列や1行の範囲指定であっても必ず2次元配列になります
ワークシートの仕様が2次元だからです、ですが2次元ではなく1次元の配列にしたい、という場合は以下の記事を確認してください

使用時に注意するべきこと

注意点として、この一括代入した場合には配列の開始要素数が1から始まってしまいます

上記の画像の青色になっている行を確認してください
要素数が「1 to 3, 1 to 3」になっています
3行3列なので、1~3までの配列要素数で定義されています

通常、配列は0から始まるため
このセル範囲配列から通常の配列に代入させる場合には注意が必要です

どうしても0から始めたい場合は、新たに要素数を定義した動的配列に代入し直す必要がありますが、それはそれで面倒な処理なので、要素数を合わせるほうが楽です

また、セル自体がValiant型のように様々なデータが入っているので、Valiant型で宣言します
というか、この配列代入自体Valiant型でしか実行できません

型を限定したい場合は、この配列を加工して代入させる配列を特定の型指定を行えば可能ですが、ほぼ利点は無いと思います