[[20121101111347]] 『配列の一括転記について』(まみー) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『配列の一括転記について』(まみー)
 お世話になります。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)

知っている人同士で指摘しあっても・・・
エラーになったり、結果が意図したものでなかったり、配列の第二要素の数字が違ったりして
「なんだろうって」質問者さんが考えてくれるといいのにね。
(Calm down)

 横から失礼。

 (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.