列挙型変数を使う|Excel VBA

その他関連のテクニック

列挙型変数を使う

(Excel 2000/2002/2003/2007/2010)

セルの文字色を赤色に設定するには次のようにします。

Sub Sample1()
  ActiveCell.Font.ColorIndex = 3
End Sub

ColorIndexプロパティに設定した「3」は、色パレットの番号です。
標準のExcelでは、色パレットの3番に赤色が設定されています。
ちなみに、よく使う色は、次のような色番号が設定されています。

自動…0
黒…1
白…2
赤…3
緑…4
黄…5
青…6

赤にするときは「3」、青にするときは「6」、黄にするときは「5」…と、すべての色番号を暗記しておける記憶力のよい人ならともかく、そうでなければ「あれ?紫は何番だったかな?」と悩むことでしょう。
わからない色番号は、実際の操作をマクロ記録すればいいのですが、その時間すら惜しく感じるものです。

そこで、次のように、色番号を定数として登録することがあります。

Const myRed As Long = 3
Const myGreen As Long = 4
Const myYellow As Long = 5
Const myBlue As Long = 6

Sub Sample2()
    ActiveCell.Font.ColorIndex = myRed
End Sub

定数をモジュールレベルで宣言しておけば、どのプロシージャでも使えます。
これで作業がだいぶ楽になるのですが、どんな定数を宣言したかを覚えておかなければなりません。
何かもっと、リストから選択できるような仕組みはできないでしょうか。

そんなとき役立つのが「列挙型変数」です。
定数宣言のかわりに、宣言セクションで次のように定義します。

Enum FontColor
    Red = 3
    Green = 4
    Yellow = 5
    Blue = 6
End Enum

Sub Sample3()
    ActiveCell.Font.ColorIndex = FontColor.Red
End Sub

コードだけを見ると、あまり違いがないように感じるかも知れませんが、ぜひ、上のコードを実際に入力してみてください。
ColorIndexプロパティに設定する値を、「FontColor.」まで入力すると列挙型変数として設定した"Red"や"Blue"がリストで表示されます。
そのまま矢印キーで選択してTabキーを押せば、入力の完了です。
これなら、忘れることも、間違えることもありませんね。

列挙型変数には、長整数型の値しか設定できません。
また、列挙型変数は、モジュールレベルでしか定義できませんので、プロシージャ内で定義することはできません。

列挙型変数は、先頭の要素で設定する値を省略すると、0が設定されたものと認識します。
2番目以降の要素で設定する値を省略すると、1つ上の値に「+1」した数値が設定されたものと認識されます。

したがって、
自動…0
黒…1
白…2
赤…3
緑…4
黄…5
青…6

は次のように記述することも可能です。

Enum FontColor
  Normal
  Black
  White
  Red
  Green
  Yellow
  Blue
End Enum

可能ですが、上で書いたような列挙型変数の特徴を知らない人にとっては、何が定義されているかが理解できません。
そのような可読性の劣るコードは、ビジネスの現場で使うべきではありません。
列挙型変数の値は、必ず定義するようにしましょう。