TransposeArray2D|二次元配列を安全に転置する | Excel VBA
- yuji fukami
- 6 時間前
- 読了時間: 2分

<概要 (転置)>
TransposeArray2D は、Excel VBA において二次元配列を安全かつ確実に転置(行⇔列を入れ替え)するための汎用プロシージャです。
Excel標準の WorksheetFunction.Transpose は便利ですが、
・(N,1) の二次元配列を転置すると (N) の一次元配列になってしまう
・戻り値の配列次元が不安定
といった実務上の問題があります。
本プロシージャでは、入力が「開始インデックス1の二次元配列」であることを前提に、常に (M,N) → (N,M) の二次元配列として転置結果を返します。
そのため、配列ベース処理を前提とした高速処理・安全設計の VBA コードにおいて、WorksheetFunction.Transpose の代替として安心して使用できます。
Excel VBA 配列 を扱う処理設計において、基本となる汎用プロシージャの一つです。
<実行例>
実行例のサンプルコードは次の通りです
実行結果のイミディエイトウィンドウは次のようになります。

このサンプルでは、(5行×1列) の二次元配列 src を用意し、TransposeArray2D と WorksheetFunction.Transpose の挙動差を比較しています。
■1) TransposeArray2D の結果
・TypeName は Variant()(配列)
・Bounds が (1 To 1) × (1 To 5) となっており、転置後も「二次元配列」のまま維持されています。
・要素も Date 型のまま保持されているため、日付としての演算や比較が安全に行えます。
つまり (N,1) → (1,N) の転置をしても、戻り値は常に二次元配列です。
■2) WorksheetFunction.Transpose の結果
・TypeName は Variant() で IsArray も True ですが、
UBound(result2, 2) が取得できず、二次元ではなく「一次元配列」になっています。
・さらに、各要素の型が String になっており、Date 型が文字列化されています。
このように WorksheetFunction.Transpose は、入力が (N,1) の二次元配列のとき、戻り値の次元が不安定(一次元化)になったり、型が変化(文字列化)したりする場合があります。
■結論
配列ベース処理で「次元を崩さず」「型も維持したい」場合は、WorksheetFunction.Transpose の代わりに TransposeArray2D を使うことで、安定した二次元配列の転置処理を実現できます。
<関連コード>
今回の汎用プロシージャは、下記の別で紹介している汎用プロシージャを使用しています。
・IsArray2D → https://www.softex-celware.com/post/isarray1d
・IsArray2DStart1 → https://www.softex-celware.com/post/isarray1d
<関連記事>
今回紹介しているような汎用プロシージャを部品として一元管理する方法は別記事で紹介していますので、是非このノウハウも参考にしてみてください。
コーディングを効率化する上でどんどん増やしていった汎用プロシージャ(部品)をいくら増やしても簡単に流用ができるような仕組みの構築が可能になります。




コメント