配列操作

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

パーツ化とは

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

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

このコードをコピペでOK

Public Sub sample_array_transpose()
    Dim arr1(2, 3) As Variant
    Dim arr2 As Variant
    
    '■サンプルデータを格納
    arr1(1, 1) = 1
    arr1(1, 2) = 2
    arr1(1, 3) = 3
    arr1(2, 1) = "あ"
    arr1(2, 2) = "い"
    arr1(2, 3) = "う"
    
    '■Transposeで縦横を入替
    arr2 = Application.WorksheetFunction.Transpose(arr1)
    
    '■縦横が変換された結果
    Debug.Print arr2(1, 1)  '1
    Debug.Print arr2(1, 2)  'あ
    Debug.Print arr2(2, 1)  '2
    Debug.Print arr2(2, 2)  'い
    Debug.Print arr2(3, 1)  '3
    Debug.Print arr2(3, 2)  'う
End Sub

注意点

  • Transposeの仕様上、Option Base 1を設定した方が無難です。
    Transeposeで変換した配列は0スタートではなく1スタートです。
    OptionBase1で事前に初期値を1にしましょう
  • 二次元配列しか対応していません。(三次元配列などの多次元配列は対応できません。)

どんな時に使える?

IE自動操作でサイト内のテーブルデータを取得する事は多いでしょう。
テーブルデータを縦横変換して入れ替えて使用するケースも多いです。

その場合一度データは配列に取込後に行列入替するとスムーズです。

関連記事

この機能を上手く利用したのが以下の記事です。
二次元配列の一次元目を増やす処理をTransposeで実現しています。
「二次元配列を動的に行数(一次元目)を増やす」をパーツ化する【ExcelVBA】

コメント

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