サイトについて      連絡先   検索

VBA 列挙型 Enum

はじめに

Excel VBA の列挙型 Enum の使い方を紹介します。

選択肢や状態を指定するのに便利です。

関数の戻り値や引数に使って、3 択以上に処理を分けられます。

Enumの定義

Enum が列挙型を宣言するキーワードです。

Enum 列挙型名のようにして宣言します。Enum の中に Long 型の定数値を設定します。


Enum VbMsgBoxResult
    vbOK = 1
    vbCancel = 2
    vbAbort = 3
    vbRetry = 4
    vbIgnone = 5
    vbYes = 6
    vbNo = 7
End Enum

定数値を指定しないと自動で 0 から連番が設定されます。


Enum OfficeStyle
    Excel  ' 0 
    Word   ' 1
    Access ' 2
End Enum

Enum の使い方

Enum は選択肢が 3 通り以上必要なときに便利です。Boolean では 2 通りでしか表せなく、String や Integer などは関連性がわかりづらくなります。


Dim result As VbMsgBoxResult  
result = MsgBox("メッセージ", vbYesNoCancel)

Select Case result
    Case VbMsgBoxResult.vbYes
    Case VbMsgBoxResult.vbNo
    Case VbMsgBoxResult.vbCancel
End Select

Sub Tips(result As VbMsgBoxResult)

    Select Case result
        Case VbMsgBoxResult.vbYes
        Case VbMsgBoxResult.vbNo
        Case VbMsgBoxResult.vbCancel
    End Select

End Sub

このように関数の戻り値や引数の型を Enum にして処理を分けられるようになります。

ビット演算

次のように 1, 2, 4, 8・・・と2進数で Enum を定義するとフラグとして使えます。フラグはビット演算すると、簡単に判別できます。


Enum Allign
    None = 0   ' 0000
    Top = 1    ' 0001
    Bottom = 2 ' 0010
    Left = 4   ' 0100
    Right = 8  ' 1000
End Enum

Dim 四角 As Allign
四角 = Allign.Top Or Allign.Bottom

If (四角 And Allign.Top) = Allign.Top Then
    Debug.Print ("Top")  ' 通る
End If  
If (四角 And Allign.Left) = Allign.Left Then
    Debug.Print ("Left") ' 通らない    
End If

関連ページ