コード生成グループ「Enum作成」の解説
- yuji fukami
- 10月20日
- 読了時間: 5分
概要
書籍「Excel VBA開発を超効率化するプログラミングテクニック」の特典であるIkiKaiso2.xlamのリボン登録マクロの解説のための特設ページです。
出版社の書籍のページ⇒https://gihyo.jp/book/2024/978-4-297-14023-6
リボン登録マクロ全体解説ページ⇒https://www.softex-celware.com/post/ikikaiso2
本ページではIkiKaiso2.xlamの「コード生成」グループの「Enum作成」ボタンの使い方を解説します。

解説
用途
表のヘッダーをセル選択した状態して、ヘッダーの項目名のEnumコードを自動作成する。
なおEnumは別に「列挙体」と呼びますが、本記事では「Enum(イーナム)」と統一した呼び方とします。
使い方
実際に使っている様子と説明は下記動画を参照してください。
手順は次の通りです。
①:表のヘッダー部分のセルを選択
②:「Enum作成」ボタンをクリック
③:Enumの名前を入力
④:Enumの要素名のアルファベットを入力(未入力なら要素名はヘッダー名通り)
⑤:Enumのコードが自動生成されクリップボードに格納される(VBEが起動してイミディエイトウィンドウに確認表示)
⑥:好きな所に貼り付ける
ちなみにEnumの名前は必ず頭に「Enum_」と付くようにしていますが、これは筆者のコーディング規則に合わしていますので、ご自身のコーディング規則に合わせたい場合は「Enum作成」に登録してあるマクロのコードを自由に書き換えてOKです。
要素名にアルファベットと連番を入れる/入れないの違い
上記の動画で2パターンのEnumの作成の仕方をしましたが、この2パターンについてのメリット・デメリットや使い分け等について解説です。
2パターンは次の通りです
パターン①:Enumの要素名の接頭にアルファベットと数字の連番を入れる
パターン②:Enumの要素名はヘッダー名そのままにする


説明の前準備として、シート上の表を二次元配列として取得するプロシージャを別途作っておきます。
こちらのコードの自動生成のテクニックは下記リンクにて解説していますので、是非参考にしてください。
「コード生成グループ「動的コード生成」の解説」

指標1「入力候補の選びやすさ」
パターン①のアルファベットと連番を入れる場合は、Enumで列番号を与える時にEnum名(Enum_M名簿.」)まで入力して、表示される要素名の入力候補一覧が定義した順番(=列順)で並ぶので、入力するときに選びやすく効率的です。すなわちコーディングが効率的に行えます。

パターン②の要素名がヘッダー名そのままの場合は、入力候補の要素名は文字列順となり、定義された順番ではなくなるので入力候補から選ぶのが大変になります。
これは表の列数が多いほどこのメリット/デメリットの差が顕著になります。

指標2「列の追加などの表の変更時」
下記図のように元の名簿の表に例えば「血液型」と列が追加されたとします。実際の現場ではどんなに注意してもこのような列の追加(もしくは消去)などのような変更は普通に発生しますので、開発者は常に心構えておく必要があります。

このように列が追加されても定義したEnumのコードは「Enum作成」で簡単に書き換えが可能ですので、表の仕様変更に伴うEnumの書き換えに関しては労力はほとんど発生しない前提とします。
問題は、Enumの書き換えの後で、「Enumを使用しているコードの書き換え」です。
パターン①のアルファベットと連番をつける場合は下記の様に、Enumを使用しているコードの部分をすべて書き換える必要が出てきます。

ちなみに、この書き換え位置の確認は「デバッグ」→「VBAProjectのコンパイル」で簡単に確認ができますので、血眼にコードを眺めて探すような必要はありません。

パターン②のヘッダー名そのままの要素名の場合はEnumコードを変更しても、それ以外のコードの変更は不要になってきます。

すなわち、列の追加などの表の仕様変更に対して労力が少ないのはパターン②のほうで、パターン②のほうがメリットが大きいとなります。これもコード内でEnumを使用している部分が多いほどパターン①は書き換え箇所が多くなるので、このメリット/デメリットの差は大きくなります。
指標3「コードの可読性」
パターン①のアルファベットと連番を含む場合は、コードの中に列番号の情報を含むので可読性が高いです。コードを眺めたときに、「ここはこの列番号のこのヘッダ名の情報を指している」というのが瞬時に情報として取得できます。列番号が分かることで、元の情報のワークシートを見に行ったときに、すでに何列目かが分かっているので場所を見つけやすくなります。

対してパターン②の要素名がヘッダー名そのままの場合は列番号を含まない分可読性が低いです。コードを眺めて取得できる情報は「ヘッダー名」のみですので、「何列目」の情報かは読み取ることができません。

まとめ
以上の3つの指標を表にまとめると次のようになります。
Enumのコーディング規則比較表
指標 | パターン①(アルファベット+連番) | パターン②(要素名=ヘッダー名) |
コーディングのしやすさ | ○ | × |
表の仕様変更時の手間の無さ | × | ○ |
可読性 | ○ | × |
結局のところ使い分け?
上記の比較表を参考にしつつ、最終的な落としどころはこの2つのパターンの使い分けです。筆者の場合はまだ検証中ではありますが、
表の列数が少ない場合はパターン②
表の列数が多い場合はパターン①
とするように使い分けています。
まだ検証中のため、その列数の分岐点のようなものはあいまいですが、おおよそ20~30ぐらいの数がそのあたりです。
そもそもですが、VBEの仕様で入力候補が名前順にしかならないのが問題ですが...。


コメント