
【Excel VBA】二次元配列の行、列を増やす関数
目的
Excel VBAは配列の扱いがどうにも面倒で、一度作成した配列にデータを追加しようとすると、とても面倒な処理を書かないといけない。
よく使うので関数にしておいた方がメンテナンス性が良くなる、コード量を減らせるメリットがあると考えて作ってみた。
完成コード
'**
'* 二次元配列の最終行、最終列に指定した行、列を追加する関数
'* 引数1 :Array2D {Variant型} 行列を追加したい二次元配列
'* 引数2 :[AddRow] {Long型} 追加する行数/省略なら0
'* 引数3 :[AddCol] {Long型} 追加する列数/省略なら0
'* 返り値:{Variant型} 最終行、最終列に指定した行、列を追加された二次元配列
'**
Private Function F_Resize_Array2D(ByVal Array2D As Variant, _
Optional ByVal AddRow As Long = 0, _
Optional ByVal AddCol As Long = 0) As Variant
'引数チェック
If AddRow < 0 Then
MsgBox "AddRowは0以上の整数を入力してください", vbExclamation
Stop: Exit Function
End If
If AddCol < 0 Then
MsgBox "AddColは0以上の整数を入力してください", vbExclamation
Stop: Exit Function
End If
'処理
Dim I As Long, J As Long
Dim N As Long: N = UBound(Array2D, 1)
Dim M As Long: M = UBound(Array2D, 2)
ReDim output(1 To N + AddRow, 1 To M + AddCol) As Variant
For I = 1 To N
For J = 1 To M
output(I, J) = Array2D(I, J)
Next J
Next I
'出力
F_Resize_Array2D = output
End Function
使い方
Public Sub TestCode()
ReDim Arr(1 To 1, 1 To 1) As Variant
Debug.Print UBound(Arr, 1), UBound(Arr, 2)
Arr = F_Resize_Array2D(Arr, 3, 5)
Debug.Print UBound(Arr, 1), UBound(Arr, 2)
End Sub
Redimで定義した配列であれば、三行目のように記載すれば、行と列をワンライナーで増やすことが可能です。