- ベストアンサー
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列) よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
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 と、いうようなやり方はだめでしょうか。
その他の回答 (2)
- n-jun
- ベストアンサー率33% (959/2873)
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 では意味無し?
お礼
ありがとうございます。 たぶんこれがもっとも簡単なのでしょうね。 Intersectを初めて見ました。 まだ知識が足りてないと実感しました。 さらに精進します。
- okormazd
- ベストアンサー率50% (1224/2412)
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
補足
きちんと書いてないのが悪いんですが、実行速度向上を狙ってましたので残念ながら意にそぐわなかったです。 ごめんなさい。
お礼
後半部、これもNo.3の方と同じような感じですよね。 こっちの方が考えていたのにあってましたね。 お二方、感謝します。 動的配列の取りだし方、という点でこちらの方が優れてましたね。 ありがとうございました。