LoginSignup
3
2

More than 3 years have passed since last update.

メモ:VBAで2次元配列を行方向に結合

Last updated at Posted at 2019-07-19

二次元配列AとBを行方向に(下方向)に結合したい。
ReDim Preserveは、最終次元しか拡張できない。つまり、結合可能なのは列方向のみ。そのため、下記の手順で結合する。
使い道があるかは不明。。。大量のブックを高速に集約するのに役立つかも。

・AとBを転置してAtとBtにする。

列方向に結合に動的に結合(At ← Bt)

結合後の配列をさらに転置して元の向きを戻す。

無題.png

Sub merge_array()

Dim array_A(), array_B(), array_At(), array_Bt()

array_A = Range2Array(4, 1)
array_B = Range2Array(10, 1)

'①AとBを転置。AtとBtにする。
'配列の1次元のインデックスは1からになっている。
array_At = WorksheetFunction.Transpose(array_A)
array_Bt = WorksheetFunction.Transpose(array_B)
former_i = UBound(array_At, 2)
add_i = UBound(array_Bt, 2)

'AtとBtを列方向に結合
'AtをBtと同じサイズ分拡張。拡張したところにBt格納。
'①に合わせて「1 To ~」と宣言しないといけない
ReDim Preserve array_At(1 To UBound(array_At, 1), 1 To (UBound(array_At, 2) + add_i))
For j = 1 To UBound(array_Bt, 2)
    For i = 1 To UBound(array_Bt, 1)
        array_At(i, j + former_i) = array_Bt(i, j)
    Next i
Next j

'結合後の配列を転置して向きを戻し、貼り付け
Cells(4, 17).Resize(UBound(array_At, 2), UBound(array_At, 1)).Value = WorksheetFunction.Transpose(array_At)

End Sub

レンジを2次元配列にする関数↓


Public Function Range2Array(begin_row As Long, begin_column As Long) As Variant
    last_row = Cells(begin_row, begin_column).End(xlDown).Row '終端行
    last_column = Cells(begin_row, begin_column).End(xlToRight).Column '終端列

    Range2Array = Range(Cells(begin_row, begin_column), Cells(last_row, last_column))
End Function

3
2
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2