パーツ化とは
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】
コメント