[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA:ある配列を横1列の配列に変換する』(masabou5)
A B C D E F G H I J K L M 1 2 5 6 2 5 6 3 4 8 9 1 7 2 3 4 8 3 9 1 7
上記のようにA1〜C3の配列を、E1〜M1の配列に変換するVBAを教えて下さい。よろしくお願いします。
オーソドックスに(自分ではそう思ってる(^^;) エラー処理とか難しいことはなしで、、 とりあえずこんな感じでどうでしょうか? Option Explicit Sub てすと() Dim MyA As Variant Dim MyAry() As Variant Dim i As Long Dim j As Long Dim k As Long MyA = Range("A1:C3").Value ReDim MyAry(1 To UBound(MyA, 1) * UBound(MyA, 2)) For i = 1 To UBound(MyA, 1) For j = 1 To UBound(MyA, 2) k = k + 1 MyAry(k) = MyA(i, j) Next Next Range("E1").Resize(, UBound(MyAry)).Value = MyAry Erase MyA, MyAry End Sub (SoulMan)
この事例では、このように書くのが、判りやすいように思いますが。。。 (LOOKUP)
Sub Macro1() Range("E1:G1").Value = Range("A1:C1").Value Range("H1:J1").Value = Range("A2:C2").Value Range("K1:M1").Value = Range("A3:C3").Value End Sub
おぉぉぉ、、ということは、、 こういうことですね(^^; Option Explicit Sub てすと() Dim MyA As Variant Dim i As Long Dim k As Long MyA = Range("A1:C3").Value For i = 1 To UBound(MyA, 1) Range("E1").Offset(, k).Resize(, UBound(MyA, 2)).Value = Application.Index(MyA, i, 0) k = k + UBound(MyA, 2) Next Erase MyA End Sub (SoulMan)
っちゅうことはこんなんもありか? '------------------ Sub test() Dim i As Integer For i = 1 To 3 Cells(1, 2 + i * 3).Resize(, 3) = Cells(i, 1).Resize(, 3).Value Next i End Sub (弥太郎)
うへ。弥太郎さんと衝突するとは(爆)。
SoulManさんへ。 LOOKUPさんがいってるのは、そういう意味じゃないと 思いますよ。 UBoundとかResizeとがいろいろ使ってるから、私的にはパッと見、 難しそうなプログラムに感じます。 ただ、範囲の拡大等によるコード修正を考えたときに どのレベルまでにするかが人それぞれですから。 本来なら入力と処理と出力をきっちり分けて、サブルーチンとして 作っておいたほうがよいものだと思います。 私なら↓ぐらいでしょうか。出力順を変えられると痛いですが(汗)。 (ramrun)
Option Explicit Sub test() Dim before As Range Dim after As Range Dim c As Variant Dim n As Long
Set before = Range("A1:C3") Set after = Range("E1:M1") n = 1 For Each c In before after(n) = c n = n + 1 Next c End Sub
ふむふむ、な〜るほど(笑 そもそも弥太郎流横着マクロはramrun流が基盤になっとりますんで、出来が悪かったら 基盤が悪いっちゅうことになりますデス、はい。 (弥太郎)
>LOOKUPさんがいってるのは、そういう意味じゃないと 思いますよ。 了解v(=∩_∩=)v うぅ〜〜ん、、素晴らしい!!! 四角を長方形って感じです。それも、直ですね。 しかし、発想が柔らかいですねぇ(^^; >オーソドックスに(自分ではそう思ってる(^^;) ↑ちょっと煮詰まってるかな?と思っておりました。 精進!精進!!ですね。ありがとうございました。 (SoulMan)
SoulManさん、Lookupさん、弥太郎さん、ramrumさん、いつもありがとうございます。 すべての議論についていけないところもありますが、いろいろなやり方があり、 とても参考になりました。 今後ともよろしくお願いします。ありがとうございました。(masabou5)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.