VBA 配列の転置
Last updated on 6月 12, 2022
このチュートリアルでは、VBAを使用して配列を転置する方法について説明します。
配列の転置
この関数は、2次元の配列を転置します。
Function TransposeArray(MyArray As Variant) As Variant
Dim x As Long, y As Long
Dim maxX As Long, minX As Long
Dim maxY As Long, minY As Long
Dim tempArr As Variant
'上下限を取得する
maxX = UBound(MyArray, 1)
minX = LBound(MyArray, 1)
maxY = UBound(MyArray, 2)
minY = LBound(MyArray, 2)
'新しい Temp Array の作成
ReDim tempArr(minX To maxX, minY To maxY)
'配列を転置する
For x = minX To maxX
For y = minY To maxY
tempArr(y, x) = MyArray(x, y)
Next y
Next x
'転置した配列を出力する
TransposeArray = tempArr
End Fucntion
Sub TestTransposeArray()
Dim testArr(1 To 3, 1 To 2) As Variant
Dim outputArr As Variant
'配列の値を代入する
testArr(1, 1) = "スティーブ"
testArr(1, 2) = "ジョンソン"
testArr(2, 1) = "ライアン"
testArr(2, 2) = "ジョンソン"
testArr(3, 1) = "アンドリュー"
testArr(3, 2) = "スコット"
'TransposeArray関数を呼び出す
outputArr = TransposeArray(testArr)
'結果を出力する
MsgBox outputArr(2, 1)
End Sub
この関数をテストするには、TestTransposeArrayプロシージャを呼び出します。ここでは、初期配列testArrが作成され、outputArrが最終的な転置配列となります。
WorksheetFunction.Transpose
上述の方法の代わりに、Excelで転置した配列をExcelに出力したい場合があります。その場合、ExcelのTranspose Worksheet Functionを使用することができます。 このプロシージャでは、Transpose Worksheet Functionを使って、2次元配列をExcelの範囲に移し替えます。
Sub TestTransposeArray_Worksheetfx()
Dim maxX As Long, minX As Long
Dim maxY As Long, minY As Long
'配列を作成し値を割り当てる
Dim MyArray(1 To 3, 1 To 2) As Variant
MyArray(1, 1) = "スティーブ"
MyArray(1, 2) = "ジョンソン"
MyArray(2, 1) = "ライアン"
MyArray(2, 2) = "ジョンソン"
MyArray(3, 1) = "アンドリュー"
MyArray(3, 2) = "スコット"
'上下限を取得する
maxX = UBound(MyArray, 1)
minX = LBound(MyArray, 1)
maxY = UBound(MyArray, 2)
minY = LBound(MyArray, 2)
'配列を転置してExcelへ書き出す
Range("a1").Resize(maxY - minY + 1, maxX - minX + 1).Value = _
Application.WorksheetFunction.Transpose(MyArray)
End Sub