本記事の場合、要素が65537以上だと正常な値が取得できません。
こちらの記事が改良版です。
パーツ化とは
ExcelVBAマクロ初級者からの脱却が、処理のパーツ化(プロシージャの分割)と考えています。
マクロを作る上で基本機能をパーツ化する事で、開発時間の削減に繋がります。
処理はパーツ単位で分ける事を心掛けましょう。
分かりやすく説明すると、エクセルの「関数」と同様です。
SUM関数であれば セル内に「=SUM(1+2+3)」と記載すれば、セルには「6」と表示されますよね。
値を渡せば正しい値で返ってくる動きです。
このコードをコピペでOK
Public Sub Call_array_transpose() Dim arr2 As Variant '■サンプルデータを格納 Dim arr1(2, 3) 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】
コメント