配列(一次元/二次元)

【改良】二次元配列の行列(縦横)を入れ替える【ExcelVBA】

パーツ化とは

ExcelVBAマクロ初級者からの脱却が、処理のパーツ化(プロシージャの分割)と考えています。
マクロを作る上で基本機能をパーツ化する事で、開発時間の削減に繋がります。
処理はパーツ単位で分ける事を心掛けましょう。

分かりやすく説明すると、エクセルの「関数」と同様です。
SUM関数であれば セル内に「=SUM(1+2+3)」と記載すれば、セルには「6」と表示されますよね。
値を渡せば正しい値で返ってくる動きです。

このコードをコピペでOK

'■二次元配列の縦横を入れ替える
Public Function Call_arrTranspose(arr As Variant) As Variant
    Dim tmp As Variant
    Dim r As Long, c As Long

    '■arrの行列を入れ替えてtmpを宣言
    ReDim tmp(LBound(arr, 2) To UBound(arr, 2), LBound(arr, 1) To UBound(arr, 1))
    
    '■arrの行列をtmpに入れていく
    For r = LBound(arr, 1) To UBound(arr, 1)
        For c = LBound(arr, 2) To UBound(arr, 2)
            tmp(r, c) = arr(c, r)
        Next c
    Next r

    Call_arrTranspose = tmp
End Function

使い方

Public Sub sample()

    Dim arr As Variant
    ReDim arr(1 To 3, 1 To 3)
    
    '■テストデータ生成
    arr(1, 1) = 1
    arr(2, 1) = 2
    arr(3, 1) = 3

    '■行列を入れ替える
    arr = Call_arrTranspose(arr)

    '■結果確認
    Debug.Print arr(1, 1)   '1
    Debug.Print arr(1, 2)   '2
    Debug.Print arr(1, 3)   '3

End Sub

注意点

  • 二次元配列しか対応していません。(三次元配列などの多次元配列は対応できません。)

関連記事

コメント

  1. 便利なコードをありがとうございます

    このコードをコピペして使ってみたらエラーが出ました
    この行↓のr,cを入れ替えたらうまく動きましたのでご報告します
    tmp(r, c) = arr(c, r) → tmp(c, r) = arr(r, c)

タイトルとURLをコピーしました