|
使用頻度はほとんど無いと思うけど、なんとなく勉強のために。
なんかやたら、メモリ喰いそうだし。
シートに貼り付けて合体させた方が速そう。
エクセル関数を使っているので要素数の上限問題が…。
Excel2000だと、Transposeできる配列の要素数は、5461個(1〜5461)まで。
つまり、Excel2000だと2つの配列の総素数の合計が、5461個までしかまともに動かないと思う。
10カラム(10列)づつだったら、合計546行ぐらいか。
しょぼい。
見本(下記コードで作った)以外のデータでは試していません。
尚、メインのThinkpad A31(Win2000 & Excel2000)のバッテリーが逝かれて、
起動するとバイオス画面が出てくるようになったので、
下記コードは、Win7 & Excel2007 で書きました。
Sub 二次元配列合体()
Dim TBL_1(1 To 4, 1 To 4)
Dim TBL_2(1 To 3, 1 To 4)
Range("A1:E20").Value = Empty
'二次元配列に値を代入(ショボイデータ作成)
TBL_1(1, 1) = 11: TBL_1(1, 2) = 12: TBL_1(1, 3) = 13: TBL_1(1, 4) = 14
TBL_1(2, 1) = 21: TBL_1(2, 2) = 22: TBL_1(2, 3) = 23: TBL_1(2, 4) = 24
TBL_1(3, 1) = 31: TBL_1(3, 2) = 32: TBL_1(3, 3) = 33: TBL_1(3, 4) = 34
TBL_1(4, 1) = 41: TBL_1(4, 2) = 42: TBL_1(4, 3) = 43: TBL_1(4, 4) = 44
Range("A1:D4").Value = TBL_1
TBL_2(1, 1) = "A1": TBL_2(1, 2) = "B1": TBL_2(1, 3) = "C1": TBL_2(1, 4) = "D1"
TBL_2(2, 1) = "A2": TBL_2(2, 2) = "B2": TBL_2(2, 3) = "C2": TBL_2(2, 4) = "D2"
TBL_2(3, 1) = "A3": TBL_2(3, 2) = "B3": TBL_2(3, 3) = "C3": TBL_2(3, 4) = "D3"
Range("A6:D8").Value = TBL_2
MsgBox "シートに書いた2つの配列を合体します。"
'列数分の配列を作り、二次元配列から1列づつ一次元配列に変換した配列を収めていく。
'二次元配列から1列転記した場合、二次元配列になっていたので。
Dim tbb(1 To 4)
Dim NewTB()
For i = 1 To UBound(tbb)
tbb(i) = Split(Join(Application.Transpose(Application.Index(TBL_1, 0, i))) & " " & _
Join(Application.Transpose(Application.Index(TBL_2, 0, i))))
Next
NewTB = Application.Transpose(tbb)
行 = UBound(NewTB, 1)
列 = UBound(NewTB, 2)
Range("A11").Resize(行, 列).Value = NewTB
Erase TBL_1, TBL_2, tbb, NewTB
End Sub
|
|