Excel VBA 逆引き集 | 行列反転

Excel VBA
スポンサーリンク

行列反転(Transpose)

Excel VBAで「行と列を入れ替えたい(転置したい)」ときに便利なのが Transpose(転置)処理 です。初心者向けに、コード例とテンプレートをかみ砕いて説明します。


基本の考え方

  • WorksheetFunction.Transpose を使うと、配列やRangeを簡単に転置できる。
  • 用途:
    • 行列を入れ替える(例:縦のリストを横に並べる)。
    • 配列を転置して別の処理に使う。
  • 注意点:
    • Transpose は最大 65,536 要素までしか扱えない。
    • 二次元配列を転置すると「行数と列数が入れ替わる」。

テンプレ1:Rangeを転置して別の場所に貼り付け

Sub Transpose_Range()
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim src As Range: Set src = ws.Range("A1:A5") ' 縦のリスト
    Dim dst As Range: Set dst = ws.Range("C1")    ' 横に出力開始セル

    dst.Resize(1, src.Rows.Count).Value = WorksheetFunction.Transpose(src.Value)
End Sub
VB
  • ポイント: 縦のリスト(A1:A5)を横方向(C1:G1)に転置。

テンプレ2:二次元配列を転置

Sub Transpose_Array()
    Dim arr As Variant
    arr = Range("A1:C3").Value ' 3行×3列の二次元配列

    Dim arrT As Variant
    arrT = WorksheetFunction.Transpose(arr)

    ' 転置結果をシートに書き戻す
    Range("E1").Resize(UBound(arrT, 1), UBound(arrT, 2)).Value = arrT
End Sub
VB
  • ポイント: 3×3の配列を転置すると「行と列が入れ替わる」。

テンプレ3:一次元配列を転置して横→縦に変換

Sub Transpose_1DArray()
    Dim arr As Variant
    arr = Array("りんご", "みかん", "バナナ")

    ' 横配列を縦に
    Dim arrT As Variant
    arrT = WorksheetFunction.Transpose(arr)

    ' 縦方向に出力
    Range("A1").Resize(UBound(arrT, 1), 1).Value = arrT
End Sub
VB
  • ポイント: 一次元配列を転置すると「縦配列」になる。

テンプレ4:行列反転を自作(大規模対応)

Function MyTranspose(arr As Variant) As Variant
    Dim r As Long, c As Long
    Dim arrT() As Variant
    ReDim arrT(1 To UBound(arr, 2), 1 To UBound(arr, 1))

    For r = 1 To UBound(arr, 1)
        For c = 1 To UBound(arr, 2)
            arrT(c, r) = arr(r, c)
        Next c
    Next r

    MyTranspose = arrT
End Function

Sub Example_MyTranspose()
    Dim v As Variant
    v = Range("A1:C5").Value

    Dim vT As Variant
    vT = MyTranspose(v)

    Range("E1").Resize(UBound(vT, 1), UBound(vT, 2)).Value = vT
End Sub
VB
  • ポイント: WorksheetFunction.Transpose の制限を超える場合は自作関数で対応可能。

例題で練習

'例1:縦リストを横に転置
Sub Example1()
    Transpose_Range
End Sub

'例2:二次元配列を転置
Sub Example2()
    Transpose_Array
End Sub

'例3:一次元配列を縦に転置
Sub Example3()
    Transpose_1DArray
End Sub

'例4:大規模配列を自作関数で転置
Sub Example4()
    Example_MyTranspose
End Sub
VB

初心者向けポイント

  • Transposeは便利: Rangeや配列を簡単に行列反転できる。
  • 制限に注意: 65,536要素までしか扱えない。大規模は自作関数で。
  • 一次元配列も転置可能: 横→縦、縦→横に変換できる。
  • 出力はResizeで調整: 転置後のサイズに合わせて書き戻す。
タイトルとURLをコピーしました