[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『配列の一括転記について』(まみー)
お世話になります。2次元配列に格納したものを部分的に一括で転記できますか? 例えば vv(10,15)とした配列をあるシートのA1セルから転記させる場合
Activesheet.range("A1").resize(10,15)=vv
とすると一括で転記できるのですが、これを部分的に例えば、13、14列のみ転記する場合は
for i=1 to 10 for k=13 to 14 Activesheet.cells(i,k-12)=vv(i,k) next next
としなけばだめですか?
こんな感じでしょうか?
Sub test()
Dim vv(10, 15) Dim i As Long For i = 0 To 10 vv(i, 13) = i + 1 vv(i, 14) = i + 100 Next ActiveSheet.Range("A1").Resize(UBound(vv, 1)).Value _ = Application.Index(vv, 0, 14) ActiveSheet.Range("B1").Resize(UBound(vv, 1)).Value _ = Application.Index(vv, 0, 15)
End Sub
(ウッシ)
Range("a1").Resize(UBound(vv), 2) = Application.Index(vv, Evaluate("row(1:" & _ UBound(vv) & ")"), Array(13, 14)) (seiya)
まみーさんは Option Base 1 がついているのですかね?(ROUGE)
Rougeさんのコメントの補足。
Dim vv(10, 15) これは Dim vv(LBound To 10, LBound To 15) が省略された形。 で、LBoundは何だということになると、規定値は "0" 。 なので、Dim vv(0 To 10, 0 To 15) と、「11」行、「16」列の配列。
もし、モジュールの先頭で Option Base 1 なんて記述をしているなら規定値が 1 になるので Dim vv(1 To 10, 1 To 15) になるんだけどね。
じゃぁ、Option Base 1 を記述しよう! なんてことはだめ。 Option Base 1 を記述してまで LBound を省略するのは【邪道】
配列宣言では、必ず LBound も明示して Dim vv(1 To 10, 1 To 15) このように書こうね。
(ぶらっと)
上の2件質問の内容とは違っているようだし、真実は質問者さんからの返信待ちなんだけど? コードを実行して不都合が出た段階で判明するはず。 (seiya)
上の2件質問の内容とは違っているようだし、真実は質問者さんからの返信待ちなんだけど? コードを実行して不都合が出た段階で判明するはず。
????
関連事項としてのレスとしては、アリだと思うけど?
それぞれが気が付いたことをコメントする、それを封じ込めたいの?
何にひっかかって、このようなコメントしてるのかな?
別に自分の回答にケチつけられたわけでもないだろうに?
(ひまじん)
質問者が記述しない分を想像であれこれ言っててもなんの解決にもならない。 と、思っただけ。 (seiya)
横から失礼。
(seiya)さんの Application.Index(vv, Evaluate("row(1:" & UBound(vv) & ")"), Array(13, 14)) わぁ、しりませんでした! メモ、メモ。 行もできるかなと、行指定もArrayでやってみたらだめでしたけど、とにかく、ご教示深謝です。
(ぶらっと)
行の場合は一度Transposeして
Sub test() Dim a With Range("a1:c5") .Value = [row(a1:c5)*column(a1:c5)] a = Application.Index(Application.Transpose(.Value), Evaluate("row(a1:a5)"), Array(2, 4)) a = Application.Transpose(a) .Offset(, .Columns.Count + 2).Resize(2).Value = a End With End Sub (seiya)
あぁ、そうですね! ありがとうございました。
(ぶらっと)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.