※この記事はQiitaに投稿した記事を加筆修正しております。

 

列番号や連番を管理する時に列挙型(Enum)を使うことがしばしばあります。

その時の挙動が妙だったのでメモしておきます。

 

パターン1 変数に代入していない場合

列挙体は指定がなければ0から順にインクリメントします。

Private Enum eTEST
    a
    b
    c
    d
End Enum

要素の値は以下のようになります。

    a ⇒ 0
    b ⇒ 1
    c ⇒ 2
    d ⇒ 3

 

パターン2 変数に代入している場合

要素を指定した場合はそれぞれ指定した値になります。

Private Enum eTEST
    a = 1
    b = 2
    c = 3
    d = 4
End Enum

要素の値は以下のようになります。

    a ⇒ 1
    b ⇒ 2
    c ⇒ 3
    d ⇒ 4

 

パターン3 変則的な代入をした場合

Private Enum eTEST
    a = 1
    b = 2
    c
    d = 3
    e
    f = 4
    g
End Enum

要素の値は以下のようになります。

    a ⇒ 1
    b ⇒ 2
    c ⇒ 3
    d ⇒ 3
    e ⇒ 4
    f ⇒ 4
    g ⇒ 5

少し解説しますと、 c に指定がない場合、一つ前の b の値にインクリメントします。 その次の d は指定しているので値は 3 になります。 「指定がないと上の要素にインクリメントして設定する」というルールのようです。

 

パターン4 変則的な代入をした場合2

Private Enum eTEST
    a = 1
    b = 2
    c
    d = 3
    e
    f = b ☜ここ
    g
End Enum

上記のように別の要素を割り当てると、要素の値は以下のようになります。

    a ⇒ 1
    b ⇒ 2
    c ⇒ 3
    d ⇒ 3
    e ⇒ 4
    f ⇒ 2 ☜
    g ⇒ 3 ☜

こんな感じの書き方もできるみたいです。 (どんな場面で使うんだろう)  
 

まとめ

可読性が下がるんで、
Enumには値を指定せずに自動でインクリメントさせたほうがいいなと思いました。

 
以上