パーツ化とは
ExcelVBAマクロ初級者からの脱却が、処理のパーツ化(プロシージャの分割)と考えています。
マクロを作る上で基本機能をパーツ化する事で、開発時間の削減に繋がります。
処理はパーツ単位で分ける事を心掛けましょう。
分かりやすく説明すると、エクセルの「関数」と同様です。
SUM関数であれば セル内に「=SUM(1+2+3)」と記載すれば、セルには「6」と表示されますよね。
値を渡せば正しい値で返ってくる動きです。
このコードをコピペでOK
'■2個の二次元配列を行方向(縦方向)に結合(マージ)する
public Function Call_MergeArray_Row(arr1 As Variant, arr2 As Variant) As Variant
'■結合(マージ)後の配列サイズ
'■■行方向(縦)に結合、列方向(横)は二次元配列の大きい方に合わせる。
Dim ROW_NEW As Long
Dim COL_NEW As Long
ROW_NEW = UBound(arr1, 1) + UBound(arr2, 1)
COL_NEW = Application.WorksheetFunction.Max(UBound(arr1, 2), UBound(arr2, 2))
'■結合(マージ)後の二次元配列
Dim newArr As Variant
ReDim newArr(1 To ROW_NEW, 1 To COL_NEW)
'■二次元配列を結合処理
Dim i As Long
Dim j As Long
For i = 1 To ROW_NEW
If i <= UBound(arr1, 1) Then
For j = 1 To COL_NEW
If j <= UBound(arr1, 2) Then
newArr(i, j) = arr1(i, j)
Else
newArr(i, j) = Empty
End If
Next j
Else
For j = 1 To COL_NEW
If j <= UBound(arr2, 2) Then
newArr(i, j) = arr2(i - UBound(arr1, 1), j)
Else
newArr(i, j) = Empty
End If
Next j
End If
Next i
Call_MergeArray_Row = newArr
End Function
使い方
上記をコピペでお好きなモジュール内に記載してください。
Public Sub sample()
Dim arr1 As Variant
Dim arr2 As Variant
ReDim arr1(1, 1)
ReDim arr2(2, 2)
arr1(1, 1) = "aaa"
arr2(1, 1) = 1
arr2(1, 2) = 2
arr2(2, 1) = 3
arr2(2, 2) = 4
'■二個の配列をマージ
arr1 = Call_MergeArray_Row(arr1, arr2)
'■マージ結果
Debug.Print arr1(1, 1) ' "aaa"
Debug.Print arr1(1, 2) ' Empty
Debug.Print arr1(2, 1) ' 1
Debug.Print arr1(2, 2) ' 2
Debug.Print arr1(3, 1) ' 3
Debug.Print arr1(3, 2) ' 4
End Sub
注意点
- 二次元配列しか対応していません。(三次元配列などの多次元配列は対応できません。)
- 一次元配列の結合は下記記事を参考にしてください。
2個の一次元配列を結合(マージ)する【Join/Split】【ExcelVBA】 - 二次元配列は動的配列でも静的配列でも対応しています。
関連記事
二次元配列の行列(縦横)を入れ替える【ExcelVBA】
配列開始を1からスタートさせる【Option Base 1】【ExcelVBA】
配列から空白(Empty)を削除する【ExcelVBA】
Emptyデータかどうか判断する【IsEmpty関数】【ExcelVBA】



コメント