プロが教えるわが家の防犯対策術!

VBA初心者です。
調べてみましたがどうにも情報に行きあたらなく、ご質問をさせていただきます。

添付のようなエクセル上の同一シート上にある3つの表をコピーし、VBAで同じ配列の各列として取り込みをしたいと考えております。

大分類、中分類、小分類のそれぞれの行は同じもののそれぞれの内容を記載しており、
できればこれらを同じ配列の1列目、2列目、3列目に格納をしたいと思っております。

これらの表が1つの表にまとまっていれば、

Dim 配列(1,10) as Variant

配列 =range("A1:C10")

で事足りると思うのですが、別々のためこの方法がとれません。
セル指定で行うことも考えましたが、データが10万行を超える場合もあるため、できれば避けたいと思っています。

各表を指定し、配列の1列目、2列目、3列目に一括して代入をご存じでしたらら、どうぞ教えていただきたいと思います。

どうぞよろしくお願いします。

「VBAでエクセルのいくつかの表を同じ配列」の質問画像

A 回答 (4件)

>VBAで同じ配列の各列として取り込みをしたいと考えております。


 ⇒次の様にB・D列も含めて一括で取り込んでは駄目でしょうか。
  Dim a As Variant
  a = Range("a1:E100000")
  配列の記述は、a(1,1)等で可能です。(括弧内はCellsと同一です)
    • good
    • 0
この回答へのお礼

早速のご返答ありがとうございます。

なるほど!気が付きませんでした。
こちらが一番簡単かもしれませんね。

ただ、実際の作業用の表が間に5列あるのでできればそれぞれで代入できる方法もわかると非常にありがたいです。

お礼日時:2012/01/16 17:17

初心者ということなので、たぶん配列に入れるという発想が適当でないと思うよ。


いままでエクセルのシートのデータを2次元配列に納めようという、解説例・使用例を見たことがない。
それが(ひょっとして)適当であるかもしれないが、その後何をしたいのかをあわせて考え無いと、質問としてはおかしいであろう。
初心者の思いついた路線で、それを実現するには式の、質問するものが結構多いが、その発想そのものの妥当性(ベターかどうか)をやりたい内容をはっきりと、終わり(その先したいこと)まで書いて別に質問したらどうかな。
ーー
質問表現が普通と違う点
>同一シート上にある3つの表を
同一列にあるデータは1つの表だというのか。それなら質問に注記すること。
同一行に、3列データがデータとして存在する関連性はないのか。
たまたま1万データをA列に、他のデータをCエ列の1万行に入力しただけか?
こういう使い方はあまりしない(そういうことをあまり知らないのかもしれないが)。だから注記するものだ。
ーー
エクセルの
http://www.excel-vba.net/excel-array-002.html
のようにあるが
Sub test02()
Dim StrArray(1, 2) As String
StrArray(0, 0) = "A0"
StrArray(0, 1) = "B0"
StrArray(0, 2) = "C0"
StrArray(1, 0) = "A1"
StrArray(1, 1) = "B1"
StrArray(1, 2) = "C1"
Range("a1:C2") = StrArray
End Sub

Sub test04()
Dim VarArray As Variant
VarArray = Range("a1").CurrentRegion.Value
MsgBox VarArray(2, 3)
MsgBox VarArray(1, 3)
End Sub
はできても
空白列を縮約して代入などできるはずがない。
多分配列に入ると、メモリ内処理なので、配列を再構成する(要素数分繰り返し)をして空白列対応要素を除くのも、大変な時間がかかるということはないだろう。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。

質問にいろいろと不備がありましたようで失礼致しました。
素人ゆえ、ご容赦くださいますと幸いです。

お礼日時:2012/01/17 14:49

データを別のシートに隙間なく並べて配列に取込み、


使った別シートを削除するって言う方法もあるかも。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。

そうですよね、そちらが一番シンプルですよね。
ありがとうございます。

お礼日時:2012/01/17 14:47

私でしたら、B列D列を削除してから一括読み込みをして、その後に列を挿入して元に戻します。

    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。

他の列をできればいじりたくなかった関係でその部分だけ配列に入れられないかな、と思っていました。
こちらの方法も有効ですね。
ありがとうございます。

お礼日時:2012/01/17 14:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!