ヘッダー
Visual Basic サンプル集
VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

列挙型の宣言

2021/3/14

→ C# のサンプルに切り替える

列挙型のことを列挙体と表現する場合もあります。

 

一般的な列挙型の宣言

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

Public Enum BloodType
    A
    B
    AB
    O
End Enum

使用例

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

Dim userBloodType As BloodType
userBloodType = BloodType.A

 

列挙型の各値にXMLコメントを設定するとわかりやすいのでお勧めです。

VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

Public Enum ShapeType
    ''' <summary>正方形・長方形</summary>
    Rect
    ''' <summary>円・楕円</summary>
    Oval
    ''' <summary>Rect以外のすべての多角形</summary>
    Polygon
    ''' <summary>直線</summary>
    Line
    ''' <summary>曲線</summary>
    Curve
End Enum

 

 

値を指定した列挙型の宣言

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

Public Enum Appearance
    None = 0
    Fill = 1
    Border = 2
    Text = 4
    Shadow = 8
End Enum

 

 

値を組み合わせて使う列挙型の宣言

VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

<Flags>
Public Enum Appearance
    None = 0
    Fill = 1
    Border = 2
    Text = 4
    Shadow = 8
End Enum

メモ:値を組み合わせて使用する列挙型の各値は0からはじめ、後は1,2,4,8,16,32など 2 の n乗 にするのが無難です。

メモ:値を組み合わせて使用する列挙型の場合、名前は Appearances のように複数形にすることが多いようです。

値を組み合わせて使用する例

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

Dim drawType As Appearance = Appearance.Border Or Appearance.Text

'If (drawType And Appearance.Text) = Appearance.Text Then '← VB2008以前の場合
If drawType.HasFlag(Appearance.Text) Then '← VB2010以降の場合
    Debug.WriteLine("Text を含んでいます。")
End If

Debug.WriteLine(drawType.ToString)  

Debug.WriteLineが表示される場所

この例を実行すると次のように表示されます。

Text を含んでいます。
Border, Text

Flags属性がなくてもこのプログラムは実行可能ですが、結果は次の通りになります。

Text を含んでいます。
6

 

 

型を指定した列挙型の宣言

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

Public Enum Appearance As Short
    None = 0
    Fill = 1
    Border = 2
    Text = 4
    Shadow = 8
End Enum

メモ:指定できるデータ型は Byte, Integer, Long, SByte, Short, UInteger, ULong, UShort のどれかです。型を指定しなかった場合はIntegerになります。

 

 

参考:文字列型の列挙型のようなもの

文字列型や日付型など数値以外の型の列挙型は定義できません。似たようなものを実現するには通常の定数を利用するなどします。

VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

Public Structure Nation

    ''' <summary>日本国内を対象とする場合</summary>
    Public Const Japan As String = "日本"

    ''' <summary>中国本土を対象とする場合</summary>
    Public Const China As String = "中華人民共和国"

    ''' <summary>アメリカ合衆国。プエルトリコ等海外領土を含まない範囲。</summary>
    Public Const USA As String = "アメリカ合衆国"

    ''' <summary>ロシア連邦を構成するすべての国家</summary>
    Public Const Russia As String = "ロシア連邦"

End Structure

使用例

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

Dim target As String = Nation.USA
Debug.WriteLine(target)

アメリカ合衆国 と出力されます。 → Debug.WriteLineが表示される場所

 

専用の型として定義することもできます。複雑になる割には見返りが少なくお勧めではありません。

VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

''' <completionlist cref="Nation"/>
Public Structure Nation

    ''' <summary>日本国内を対象とする場合</summary>
    Public Shared Property Japan As New Nation("日本")

    ''' <summary>中国本土を対象とする場合</summary>
    Public Shared Property China As New Nation("中華人民共和国")

    ''' <summary>アメリカ合衆国。プエルトリコ等海外領土を含まない範囲。</summary>
    Public Shared Property USA As New Nation("アメリカ合衆国")

    ''' <summary>ロシア連邦を構成するすべての国家</summary>
    Public Shared Property Russia As New Nation("ロシア連邦")

    Private rawValue As String

    Public Sub New(rawValue As String)
        Me.rawValue = rawValue
    End Sub

    Public Shared Widening Operator CType(value As Nation) As String
        Return value.rawValue
    End Operator

    Public Shared Widening Operator CType(value As String) As Nation
        Return New Nation(value)
    End Operator

End Structure

メモ:以前(VB2015頃)までは、completionlist属性を使ったこの実装は、プログラム入力時に入力候補として表示され便利でした。Visual Studio 2019ではその機能はなくなっています。

使用例

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

Dim target As Nation = Nation.USA
Dim nationName As String = target
Debug.WriteLine(nationName)

アメリカ合衆国 と出力されます。 → Debug.WriteLineが表示される場所

 

 

参考

方法: 列挙型を宣言する - Visual Basic | Microsoft Docs

 


VB6対応 VB6でも Enum を使って列挙型を宣言します。