見出し画像

【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で定義した配列であれば、三行目のように記載すれば、行と列をワンライナーで増やすことが可能です。

いいなと思ったら応援しよう!