• ベストアンサー

ExcelVBAで動的配列の部分取り出し

Variant型配列で Dim myZaiko Worksheet("bbb").Activate myZaiko=worksheet("bbb").range("A1:E100") とした時に 別のWorksheet("aaa")にA列とC~E列をそれぞれmyZaikoから取り出して貼り付けるということは可能なのでしょうか? ニュアンスとしては下のような感じなのですが指定の仕方がわかりません。 Worksheet("aaa").Activate Worksheet("aaa").range("A1:A100").value=myZaiko(A列だけ) Worksheet("aaa").range("C1:E100").value=myZaiko(C~E列) よろしくお願いします。

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

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

1個ずつ取り出すような気がします。 Dim myZaiko Dim i As Long Dim j As Long    myZaiko = Worksheets("bbb").Range("A1:E100").Value    For i = 1 To 5   For j = 1 To 10     MsgBox myZaiko(j, i)   Next j Next i 一例ですが、 Dim myZaiko を Dim myZaiko As Range myZaiko=worksheet("bbb").range("A1:E100") を Set myZaiko=worksheets("bbb").range("A1:E100") として Worksheet("aaa").range("A1:A100").Value=myZaiko を Worksheets("aaa").range("A1:A100").Value=myZaiko.Columns(1).Value と、いうようなやり方はだめでしょうか。

siranagi
質問者

お礼

後半部、これもNo.3の方と同じような感じですよね。 こっちの方が考えていたのにあってましたね。 お二方、感謝します。 動的配列の取りだし方、という点でこちらの方が優れてましたね。 ありがとうございました。

その他の回答 (2)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

A1:E100の範囲のデータを I列にA列・K~M列にC~E列のデータを入れるとするなら Sub try() Dim r As Range Set r = Range("A1:E100") Range("I1:I100").Value = Intersect(r, Range("A:A")).Value Range("k1:M100").Value = Intersect(r, Range("C:E")).Value End Sub では意味無し?

siranagi
質問者

お礼

ありがとうございます。 たぶんこれがもっとも簡単なのでしょうね。 Intersectを初めて見ました。 まだ知識が足りてないと実感しました。 さらに精進します。

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.2

Sub test() Dim myZaiko1, col1, myZaiko2, col2 Set myZaiko1 = Worksheets("bbb").Range("A1:F100") Set myZaiko2 = Worksheets("aaa").Range("A1:F100") 'myZaiko2.Value = myZaiko1.Value   そのままコピーするのならこれだけで済むが、列ごとにしたいというのであれば、以下。 Set col1 = myZaiko1.Columns Set col2 = myZaiko2.Columns For i = 1 To 6 col2(i).Value = col1(i).Value Next End Sub

siranagi
質問者

補足

きちんと書いてないのが悪いんですが、実行速度向上を狙ってましたので残念ながら意にそぐわなかったです。 ごめんなさい。

関連するQ&A