【VBA】2次元配列の指定した行に1次元配列を挿入する

VBA

2次元配列の指定した行に1次元配列を挿入する

VBAで、2次元配列の指定した行に1次元配列を入れるサンプルプログラムです。

 

'=========================================================
'[概  要] 2次元配列の指定した行に1次元配列を挿入する
'[引数1] arr        : 2次元配列(この配列に挿入する)
'[引数2] rowIndex   : 挿入する行(0から始まるため注意)
'[引数3] newData    : 1次元配列(この配列を挿入する)
'[戻り値] 挿入後の配列
'[備 考]
'=========================================================
Function InsertAndShift(arr() As String, rowIndex As Integer, newData() As String) As String()

    Dim numRows As Integer
    Dim numCols As Integer
    numRows = UBound(arr, 1) + 1
    numCols = UBound(arr, 2) + 1

    ' 新しい行の追加
    Dim newArr() As String
    ReDim newArr(0 To numRows, 0 To numCols - 1)
    For i = 0 To numRows - 1
        For j = 0 To numCols - 1
            newArr(i, j) = arr(i, j)
        Next j
    Next i

    ' 指定位置以降のデータを後ろにシフト
    For i = numRows To rowIndex + 1 Step -1
        For j = 0 To numCols - 1
            newArr(i, j) = arr(i - 1, j)
        Next j
    Next i

    ' 新しいデータを挿入
    For j = 0 To numCols - 1
        newArr(rowIndex, j) = newData(j)
    Next j

    ' 結果の配列を返す
    InsertAndShift = newArr
   
End Function

 

 

'上の関数のテスト実行
Sub TestInsertData()

    Dim arr() As String
    ReDim arr(0 To 1, 0 To 3)

    '2次元配列の初期値を設定
    arr(0, 0) = "a0"
    arr(0, 1) = "a1"
    arr(0, 2) = "a2"
    arr(0, 3) = "a3"
    arr(1, 0) = "b0"
    arr(1, 1) = "b1"
    arr(1, 2) = "b2"
    arr(1, 3) = "b3"
  
    '挿入するデータを定義
    Dim newData() As String
    ReDim newData(0 To 3)
    newData(0) = "c0"
    newData(1) = "c1"
    newData(2) = "c2"
    newData(3) = "c3"

    '★ここで実行
    'データを挿入してシフト
    arr = InsertAndShift(arr, 1, newData)

    'データの中身を表示する
    Dim i As Integer
    Dim j As Integer
    For i = LBound(arr, 1) To UBound(arr, 1)
        For j = LBound(arr, 2) To UBound(arr, 2)
            Debug.Print "arr(" & i & "," & j & ") = " & arr(i, j)
        Next j
    Next i
   
End Sub