- ベストアンサー
大量のデータを一度に配列に入れたい
セルA1~セルB100までのデータを"一度に"VBAの2次元配列に入れたいのですが、 方法はありますでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>データを配列に入れられたと思うのですが、range("A1")=myArea(1)のように配列の値をセルに書き込もうとすると「インデックスが有効範囲にありません」とエラーになります。 当然といえば当然で、質問に「セルA1~セルB100までのデータを"一度に"VBAの2次元配列に入れたいのですが」とありますし、2次元配列を参照するのに「=myArea(1)」はないですね。 myArea(1)が何を意図されているかわかりませんが、myArea(1,1)をセルC1に書こうとすると、range("C1")=myArea(1,1) になります。range("A1")=myArea(1,1) とすると自分に自分を書き込んでしまします。 質問の場合は、セル範囲A1:B100を取り込んでいるので、myArea(1,1)がセルA1のことです。1行目、1列目から取り込んでいるので、myArea(行,列)になります。 このような懸念もあり、解答にメッセージボックスを書いています。セルB100は「myArea(100, 2)」です。100行目で2列目。 >Sub test() > Dim myArea As Variant > myArea = Range("A1:B100") > MsgBox myArea(100, 2) 'セルB100 >End Sub 「1列でも2次元です。」と書いているのは、セルA1:A100の1列を取り込んでも、myArea というVariant型の変数は2次元でセルA100は「myArea(100, 1)」のように記述する必要があるということです。 Sub test2() Dim myArea As Variant myArea = Range("A1:A100") MsgBox myArea(100, 1) 'セルA100 End Sub
お礼
ありがとうございます。 データを配列に入れられたと思うのですが、 range("A1")=myArea(1) のように配列の値をセルに書き込もうとすると 「インデックスが有効範囲にありません」とエラーになります。