TransposeArray1DtoN1|一次元配列をN×1の二次元配列へ変換 (転置)| Excel VBA
- yuji fukami
- 3 時間前
- 読了時間: 3分

<概要 (転置)>
TransposeArray1DtoN1 は、一次元配列(1 To N)を、N行×1列(1 To N, 1 To 1)の二次元配列へ変換(転置)するための汎用プロシージャです。
Excel VBA では、一次元配列を二次元配列として扱いたい場面が多く存在します。
特に、Range.Value に代入する、二次元配列前提の汎用関数へ渡す、行方向の配列処理を統一したいといったケースでは、「N×1 形式の二次元配列」が必要になります。
WorksheetFunction.Transpose を利用すると、
・日付型が文字列に変換される
・オブジェクト型が扱えない
といった問題が発生します。
TransposeArray1DtoN1 は、
・一次元配列チェック
・開始要素番号が 1 であるかの検証
・値型/オブジェクト型の両対応
を行った上で、安全に二次元配列へ変換します。
配列ベース処理を前提とした VBA 設計において、基礎インフラとして非常に重要な汎用プロシージャです。
<実行例>
実行例のサンプルコードは次の通りです
実行結果のイミディエイトウィンドウは次のようになります。

まず、TransposeArray1DtoN1 を利用した結果を確認します。
イミディエイトウィンドウには、次のような形式で出力されます。
2025/01/01 Date
2025/01/02 Date
2025/01/03 Date
2025/01/04 Date
2025/01/05 Date
表示されている通り、各要素の値は DateSerial で代入した日付であり、
TypeName の結果もすべて「Date」となっています。
これは、TransposeArray1DtoN1 がWorksheetFunction.Transpose を使用せず、
配列の各要素を Variant としてそのまま別の配列へコピーしているためです。
そのため、日付型・数値型・オブジェクト型など、元の要素の型情報が一切変換されずに保持されます。
次に、WorksheetFunction.Transpose 関数を利用した結果を確認します。
イミディエイトウィンドウには、次のような出力が表示されます。
2025/01/01 String
2025/01/02 String
2025/01/03 String
2025/01/04 String
2025/01/05 String
値の見た目は日付のままですが、TypeName を確認するとすべて「String」になっていることが分かります。
WorksheetFunction.Transpose は、内部的にワークシート関数として処理されるため、日付型や数値型が文字列へ暗黙的に変換される場合があります。
この挙動は、後続処理で日付計算や比較を行う際に、思わぬ不具合の原因となることがあります。
このように、TransposeArray1DtoN1 を利用することで、一次元配列を N×1 の二次元配列へ変換しつつ、各要素のデータ型を安全に維持することができます。
配列ベース処理を前提とした VBA 設計においては、型が変わらないこと自体が重要な仕様となるため、この違いを理解した上で使い分けることが重要です。。
<関連コード>
今回の汎用プロシージャは、下記の別で紹介している汎用プロシージャを使用しています。
・IsArray1D → https://www.softex-celware.com/post/isarray1d
・IsArray1DStart1 → https://www.softex-celware.com/post/isarray1d
<関連記事>
今回紹介しているような汎用プロシージャを部品として一元管理する方法は別記事で紹介していますので、是非このノウハウも参考にしてみてください。
コーディングを効率化する上でどんどん増やしていった汎用プロシージャ(部品)をいくら増やしても簡単に流用ができるような仕組みの構築が可能になります。



コメント