top of page

​タグ一覧

配列処理(67)

階層化フォーム(33)

ファイル操作(23)

シート・セル操作(11)

コード自動生成(10)

ユーザーフォーム(8)

図形操作(7)

GAS(5)

アニメーション(5)

技術解説(4)

副業(4)

考え方(4)

条件付き書式(4)

イミディエイトウィンドウ(3)

Enum(3)

Googleスプレッドシート(3)

ココナラ(3)

クリップボード(3)

介護(3)

開発効率化(2)

イベントプロシージャ(2)

PDF(2)

フリーランス(2)

リスキリング(2)

Excel(2)

Excel小ネタ(2)

数学(2)

Outlook(2)

文字列操作(2)

小説(2)

HTML(2)

JavaScript(2)

日報(2)

カレンダー(2)

パズル(2)

ステータスバー(1)

コード解析(1)

静的変数(1)

OneDrive(1)

バックアップ(1)

可変長引数配列(1)

ブック処理(1)

スクレイピング(1)

スプレッドシート(1)

coconala(1)

リボン登録マクロ(1)

QRコード(1)

実行予約(1)

給与計算(1)

VBA不使用(1)

リボン(1)

超勉強会(1)

六角形(1)

Excel遊び(1)

ボウリング(1)

時計(1)

スピログラフ(1)

図名描写(1)

連想配列(1)

イベント(1)

溶接ロボット(1)

VBA(1)

脱Excel(1)

Discord(1)

ECサイト(1)

CSV(1)

楽天(1)

保育士(1)

シフト表(1)

CDP(1)

楽天市場(1)

経理(1)

javascript(1)

医療(1)

文書作成(1)

LookerStudio(1)

シフト(1)

セキュリティ(1)

発注書(1)

ショートカット(1)

WebAPI(1)

色操作(1)

罫線(1)

スーパー開発ショートカット(1)

ライブラリ処理(1)

開発事例(1)

TransposeArray1DtoN1|一次元配列をN×1の二次元配列へ変換 (転置)| Excel VBA


TransposeArray1DtoN1|一次元配列をN×1の二次元配列へ変換 (転置)| Excel VBA

<概要 (転置)>

 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 設計においては、型が変わらないこと自体が重要な仕様となるため、この違いを理解した上で使い分けることが重要です。。


<関連コード>

 今回の汎用プロシージャは、下記の別で紹介している汎用プロシージャを使用しています。


<関連記事>

 今回紹介しているような汎用プロシージャを部品として一元管理する方法は別記事で紹介していますので、是非このノウハウも参考にしてみてください。

 コーディングを効率化する上でどんどん増やしていった汎用プロシージャ(部品)をいくら増やしても簡単に流用ができるような仕組みの構築が可能になります。


<コード>


コメント

5つ星のうち0と評価されています。
まだ評価がありません

評価を追加
Softex-Celware

​インボイス登録番号:T5810983887134

  • Facebook
  • Twitter
  • YouTube

©2023 softex-celware。Wix.com で作成されました。

bottom of page