【VBA】Enum(列挙型)の使い方|マジックナンバーをなくしコードを読みやすくする方法

目次

はじめに

VBAでプログラムを書いていると、「もし shippingType1 なら通常配送、2 なら速達…」のように、特定の数値を特定の意味として扱う場面がよくあります。

' マジックナンバーを使った悪い例
Sub ProcessOrder(shippingType As Long)
    If shippingType = 1 Then
        ' 通常配送の処理...
    ElseIf shippingType = 2 Then
        ' 速達の処理...
    End If
End Sub

このようなコード内の意味が分かりにくい数値 (1, 2 など) は「マジックナンバー」と呼ばれ、後からコードを見返したときに「この 1 って何だっけ?」となりやすく、バグの原因にもなります。

この問題を解決するのが、VBAの Enum (列挙型) です。Enum を使うと、これらの数値に分かりやすい名前を付け、コードを劇的に読みやすく、安全にすることができます。


Enum (列挙型) を使ったサンプルコード

Enum を使うと、先ほどのコードは以下のように書き換えられます。

完成コード

' --- Enum(列挙型)を定義 ---
' モジュールの先頭(Option Explicit の下など)に記述します
Public Enum ShippingMethod
    shipStandard = 1  ' 通常配送
    shipExpress = 2   ' 速達
    shipOvernight = 3 ' 翌日便
End Enum

' --- Enumを使った良い例 ---
Sub ProcessOrder_EnumVersion(deliveryType As ShippingMethod)
    Select Case deliveryType
        Case shipStandard
            MsgBox "通常配送で処理します。"
        Case shipExpress
            MsgBox "速達で処理します。"
        Case shipOvernight
            MsgBox "翌日便で処理します。"
    End Select
End Sub

' --- 実行用のサンプルマクロ ---
Sub Test_ProcessOrder()
    ' Enumのメンバーを直接指定して呼び出す
    Call ProcessOrder_EnumVersion(shipExpress)
End Sub

コードの解説

  • Public Enum ShippingMethod ... End Enum: ShippingMethod という名前で、新しいデータ型グループ(列挙型)を定義しています。その中で、shipStandard という名前が内部的に 1 という数値を持つ、といった対応付けを行っています。
  • deliveryType As ShippingMethod: マクロの引数のデータ型として、Long などの数値型ではなく、先ほど定義した ShippingMethod を指定しています。これにより、この引数には shipStandard, shipExpress, shipOvernight のいずれかしか渡せなくなり、間違いが起こりにくくなります。
  • Case shipStandard: If文やSelect Case文の中で、12 といったマジックナンバーの代わりに、shipStandard のような意味のある名前が使えるようになります。

Enum のメリット

1. コードの可読性が飛躍的に向上する

If myStatus = 2 よりも If myStatus = statusCompleted の方が、コードの意図が一目瞭然です。

2. 入力補完が効く

VBEでコードを入力する際、ProcessOrder_EnumVersion( と打つと、ShippingMethod のメンバー (shipStandard など) が候補として表示されます。これにより、入力ミスを防ぎ、開発効率が向上します。

3. バグの防止

引数の型を Enum で指定することで、定義されていない不正な値(例: 5)が誤って渡されるのを防ぐことができます。


まとめ

今回は、VBAの Enum (列挙型) を使って、コードから「マジックナンバー」を追放し、可読性と保守性を高める方法を解説しました。

  • Enum は、関連する一連の定数に名前を付けてグループ化する機能。
  • コード内の 1, 2, 3… といった数字が、意味のある単語に置き換わる
  • 入力補完が効き、タイプミスなどのバグも減らせる

最初は少しとっつきにくいかもしれませんが、Enum を使いこなすことは、より高品質でメンテナンスしやすいVBAコードを書くための重要なステップです。ぜひ積極的に活用してみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次