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)

TransposeArray2D|二次元配列を安全に転置する | Excel VBA

TransposeArray2D|二次元配列を安全に転置する | Excel VBA


<概要 (転置)>

 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 を使うことで、安定した二次元配列の転置処理を実現できます。


<関連コード>

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


<関連記事>

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

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


<コード>


コメント

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

評価を追加
Softex-Celware

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

  • Facebook
  • Twitter
  • YouTube

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

bottom of page