【入門編】Enum(列挙型)を活用した「状態管理」:マジックナンバーを排除し可読性を最大化する – Excel VBA解析バイブル

スポンサーリンク

マジックナンバーを葬り去れ:Enumで実現する「読み解く必要のない」VBAコード

こんにちは。現場でコードを読み解く際、「この『1』や『3』という数字は一体何を意味しているんだ……?」と頭を抱えたことはありませんか?

いわゆる「マジックナンバー」の撲滅は、プロフェッショナルなエンジニアへの第一歩です。今日は、VBAにおける強力な武器、`Enum(列挙型)`を使った「状態管理」の極意を伝授します。

1. なぜ「マジックナンバー」が諸悪の根源なのか

まずは、よくある「残念なコード」を見てみましょう。

‘ 注文ステータスを管理する関数
If status = 1 Then
‘ 処理A
ElseIf status = 2 Then
‘ 処理B
End If

この「1」や「2」が何を指すのか、コードを読んでいる本人は覚えていても、3ヶ月後の自分や他のメンバーは確実に忘れています。これがバグの温床です。「1」が「受付済み」なのか「発送済み」なのか、いちいち仕様書を確認しなければならないコードは、メンテナンス性がゼロと言っても過言ではありません。

2. Enum(列挙型)による「意味の付与」

Enumを使うと、この数字たちに「名前」を与えることができます。これにより、コードは「解読するもの」から「読むもの」へと進化します。

Enumの定義と使い方

‘ 標準モジュールの最上部に記述します
Public Enum OrderStatus
OS_Pending = 1 ‘ 受付済み
OS_Processing = 2 ‘ 処理中
OS_Shipped = 3 ‘ 発送済み
OS_Cancelled = 4 ‘ キャンセル
End Enum

これを使うと、先ほどの条件分岐はこう書き換わります。

Sub CheckStatus(status As OrderStatus)
Select Case status
Case OS_Pending
Debug.Print “注文を受け付けました。”
Case OS_Shipped
Debug.Print “発送完了しました。”
Case Else
Debug.Print “その他のステータスです。”
End Select
End Sub

どうでしょう? `status = 1` よりも `status = OS_Pending` の方が、圧倒的に「意図」が明確ですよね。

3. 現場で役立つEnum活用の極意

① IntelliSense(自動補完)の恩恵を受ける

Enumを使う最大のメリットは、コード入力時に候補が出ることです。`OS_` と打てば、設定した定数が一覧で表示されます。これにより、タイプミスによるバグを未然に防ぐことができます。

② データ型として定義する

Enumを引数に指定することで、その変数には「定義した値以外は入れさせない」という強い制約をかけることができます。これはコードの堅牢性を高める上で非常に重要です。

4. 陥りやすい罠:ここだけは注意!

初学者がEnumで躓きやすいポイントを整理しておきます。

  • Enumは「値」である: Enumは見た目は名前ですが、実態はただの `Long` 型(整数)です。そのため、計算したり比較したりすることは可能です。
  • 値の重複に注意: 同じEnum内で同じ数値を割り当てると、意図しない挙動になることがあります。基本的には自動採番(何も書かなければ0から連番)に任せるか、明示的に値を振る場合は一意になるようにしましょう。
  • スコープの意識: Enumはプロジェクト全体で使い回すことが多いので、`Public` で定義して標準モジュールにまとめるのが定石です。

まとめ:プロのエンジニアは「意図」を残す

「動くコード」を書くのは簡単です。しかし、「意図が伝わるコード」を書くのがエンジニアの仕事です。

Enumを活用することで、あなたの書くVBAは「暗号」から「誰にでも理解できる指示書」に変わります。今日からマジックナンバーを見かけたら、すぐに `Enum` に置き換える癖をつけてください。

ここをクリアすれば、あなたのVBAスキルは一段上のステージへ到達したと言っても過言ではありません。ぜひ、現場のコードで試してみてくださいね。


「なぜそう書くのか?」という問いに答えられるようになれば、あなたのコードはもっと洗練されます。また次回の記事でお会いしましょう!

タイトルとURLをコピーしました