top of page

コード生成グループ「動的コード生成」の解説

概要

 書籍「Excel VBA開発を超効率化するプログラミングテクニック」の特典であるIkiKaiso2.xlamのリボン登録マクロの解説のための特設ページです。


出版社の書籍のページ⇒https://gihyo.jp/book/2024/978-4-297-14023-6


リボン登録マクロ全体解説ページ⇒https://www.softex-celware.com/post/ikikaiso2


 本ページではIkiKaiso2.xlamの「コード生成」グループの「動的コード生成」ボタンの使い方を解説します。

動的コード生成

解説

用途

 シート上の表範囲を自動的に取得して二次元配列または一次元配列として返すコードを自動生成する

 

使い方(二次元配列の取得コード自動生成)

 例えば次のような表がシート上に入力してあるとして、ヘッダーを除いたセル範囲を二次元配列として取得したいとします。

二次元配列の取得したい範囲

 その取得用のコードは「動的コード生成」ボタンで次の動画ように自動生成します。



 実際に生成されたコードは次のようなものです。

二次元配列取得の生成コード

 シート内の表を二次元配列として取得するコードは1つのプロシージャとして構築して次のようになります。

二次元配列取得のプロシージャ作成

 別記事の「基準セルから表範囲セルを自動取得する(GetCellArea)」でも説明していますが、列数は基本的に固定するので、GetCellAreaの第2引数のColCountは今回の表をもとにすれば8と指定します。


列数の指定

 ちゃんと二次元配列が取得できたかどうかをDPAを利用して、「Get_名簿」の中身を表示すると次のようになります。ちゃんと二次元配列が取得できているのが確認できます。

 DPAは配列をイミディエイトウィンドウに見やすく表示するプロシージャで次の記事で解説しています。

二次元配列取得の結果の確認

 

 ちなみに、別のボタンの「Enum作成」を利用してヘッダーの項目名をEnumで定義しておいて、指定する列数で利用するとより可読性の高いコードにすることができます。

Enumを利用して列数の指定

 上記の様に筆者は普段Enumの各要素に「M01_番号」の「M01」のように番号を打って、入力候補で順番通りに並ぶようにしていますが、番号を振らない場合は次のようになります。ヘッダーの項目数(列数)が多い(だいたい20以上)の場合はEnumの要素に番号を振ったほうが入力候補で探す手間が省けますが、項目数が少ない場合は番号を振らないほうがメリットが多くなります。使い分けです。

Enumを利用して列数の指定 番号無し


 使い方(一次元配列の取得コード自動生成)

 次に一次元配列の取得の場合です。

 「動的コード生成」は途中で表示されるメッセージで「はい」なら二次元配列ですが、「いいえ」なら一次元配列の取得に分岐します。

 一次元配列は次のような図のように縦一列の場合です。

取得したい一次元配列の範囲


 二次元配列同様に動画で動きを見てみると次のようになります。


 手順はほぼ二次元配列の説明と被るので割愛しますが、生成されるコードについて解説します。

 実際に上記例で作成されたコードは次のようなものです。

 解説も加えています。

 

一次元配列取得コードの解説

 ちなみにDPAを利用して中身を確認するとちゃんとセル範囲が一次元配列として取得できているのが確認できます。

一次元配列として取得の結果確認

 二次元配列の場合はGetCellAreaの第2引数のColCountはヘッダーの項目数(列数)を指定するように上記で説明しましたが、一次元配列の場合は列数は1で最初から固定しています。


 次にGetArray2DFromCellを利用している理由です。

 通常セル範囲から配列取得は「Rangeオブジェクト.Valueプロパティ」で行いますが、下記の様に取得範囲の行数が1行しかない場合は単一の値になってしまいます。これを回避する処理をGetArray2DFromCellで行っています。

単一セルの場合のエラー

 次にTransposeN1toArray1Dを使っている部分ですが、こちらは「Rangeオブジェクト.Valueプロパティ」で取得した二次元配列を一次元配列に変換している処理です。


 ちなみに、縦一列の(N x 1)の二次元配列はWorksheetFunction.Transpose関数で簡単に一次元配列に変換できますが、様々な欠陥があるので利用せずに専用の汎用プロシージャとしてTransposeN1toArray1Dを使用するようにしています。

コメント


softex-celware

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

  • Facebook
  • Twitter
  • YouTube

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

bottom of page