【VBA】2次元配列の指定した行に1次元配列を挿入する
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