• ベストアンサー

大量のデータを一度に配列に入れたい

セルA1~セルB100までのデータを"一度に"VBAの2次元配列に入れたいのですが、 方法はありますでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.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

その他の回答 (2)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

Sub test()   Dim myArea As Variant   myArea = Range("A1:B100")     MsgBox myArea(100, 2) 'セルB100 End Sub 1列でも2次元です。

miya2004
質問者

お礼

ありがとうございます。 データを配列に入れられたと思うのですが、 range("A1")=myArea(1) のように配列の値をセルに書き込もうとすると 「インデックスが有効範囲にありません」とエラーになります。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

こんな感じでいかがでしょう Dim vData As Variant vData = Range("A1:B100")

関連するQ&A