このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

【VBA】Enumの使い方(列数はEnumがおすすめ)

2024年8月13日

今回はEnum(列挙体)の使い方を紹介します。

ざっくりですが、Enumは定数をまとめて宣言できるものとイメージしてください。

そんなの使うかなと感じるかもしれませんが、これはセルの列数を指定するのにとても重宝します。

もし、Cells(1, 3)といったセル指定をよくしているなら、Enumについて学んでみてください。

普段のコード作成と修正がとても楽になりますよ。

この記事では↓の内容が分かります。

  • Enumの使い方
  • Enumの注意点
  • 列数にEnumを使うメリット

VBAが難しいと感じたら
ココナラにてVBAの作成依頼を受け付けています。
ご依頼・ご相談はこちらから

Enumの使い方と注意点

Enum NUMBER
    ONE = 1
    TWO
    THREE
    FOUR
    FIVE
End Enum
Sub Sample1()
    
    Debug.Print NUMBER.ONE '1
    Debug.Print NUMBER.TWO '2
    Debug.Print NUMBER.THREE '3
    Debug.Print NUMBER.FOUR '4
    Debug.Print NUMBER.FIVE '5
End Sub

Enumは上のサンプルコードのように書きます。

Enum 名前
  定数名 = 数値
  定数名
  定数名
End Enum

Enumの構造は↑のようになります。

Subプロシージャと同じように名前を決め、あとは好きなだけ定数名を書くことができます。

定数名 = 数値とすると、その定数の値が決定されます。

そして、次の定数は値に+1された値になります。

そのため、1つ値を決めると他の定数は値を書かなくて済むのでラクチンです。

Enum NUMBER
    ONE = 1
    TWO
    THREE
    NINE = 9
    TEN
End Enum
Sub Sample2()
    
    Debug.Print NUMBER.ONE '1
    Debug.Print NUMBER.TWO '2
    Debug.Print NUMBER.THREE '3
    Debug.Print NUMBER.NINE '9
    Debug.Print NUMBER.TEN '10
End Sub

値の指定は1つだけでなく、複数指定することもできます。

サンプルコードではONEとNINEの2つの定数に値を指定しています。

どちらも、次の定数はその値+1となっているのが分かります。

' =1の指定なし
Enum NUMBER
    ONE
    TWO
    THREE
    FOUR
    FIVE
End Enum
Sub Sample3()
    
    Debug.Print NUMBER.ONE '0
    Debug.Print NUMBER.TWO '1
    Debug.Print NUMBER.THREE '2
    Debug.Print NUMBER.FOUR '3
    Debug.Print NUMBER.FIVE '4
End Sub

値の指定をしない場合は、自動的に最初の定数の値が0となります。

利用する機会は少ないかもしれませんが、一応覚えておきましょう。

Enumの注意点(変数を入れた計算はエラーになる)

Public num As Long
Enum NUMBER
    ONE = num + 1
    TWO
    THREE
    NINE = 9
    TEN
End Enum

値の指定ですが、指定するときに変数を含んだ計算式を入れるとエラーになります。

Const NUM As Long = 10
Enum NUMBER
    ONE = NUM + 1
    TWO
    THREE
    NINE = 9
    TEN
End Enum

変数はNGですが、↑のように定数の計算であればOKです。

列数はEnumを使うのがおすすめ

さて、ここまでEnumの使い方を紹介しましたが、ここからはEnumの使用例を紹介します。

ワークシートからデータを取得したり、アウトプットするときにはCells(1, 3)といった形でセルを指定すると思います。

こうした書き方は一見問題なさそうですが、ワークシートの列が追加されたりすると非常に面倒なことになります。

変更の必要なコードをすべて探し出して書き換える必要が出てくるからです。

この面倒な作業がEnumを使っておけば、一切不要になるのです。

Enum col
    ID = 1
    名前
    年齢
End Enum
Sub Sample()
    
    Dim i As Long
    For i = 2 To 3
        
        'シート上のデータをすべて表示
        Debug.Print Cells(i, col.ID);
        Debug.Print Cells(i, col.名前);
        Debug.Print Cells(i, col.年齢)
    Next
End Sub

例えば、画像のようなワークシートがあり、サンプルコードのようなセルのデータを書き出すプログラムを作ったとします。

後から必要なデータが不足していることが分かり、性別列を追加したとします。

もし、Cells(i, 3)と書いていたら3の箇所をすべて4に書き換える必要があります。探すのが大変ですし、書き換えミスが起こるかもしれません。

Enum col
    ID = 1
    名前
    性別 'ここを追加
    年齢
End Enum
Sub Sample()
    
    Dim i As Long
    For i = 2 To 3
        
        'シート上のデータをすべて表示
        Debug.Print Cells(i, col.ID);
        Debug.Print Cells(i, col.名前);
        Debug.Print Cells(i, col.年齢)
    Next
End Sub

ところが列数をEnumにしておけば、名前の後に性別を追加するだけで完結します。

数値を探して書き換えといった面倒な作業もないですし、これだけですべての列が対応できます。

このように列数はEnumを使って表現しておくのをおすすめします。

Dictionaryを使うやり方

列数の指定方法ですが、Dictionaryを使うやり方もあります。

こちらは列を挿入してもプログラムの変更が不要ですので、気になった方はご覧ください。

Enumとは何のことか

Enumはenumerate(列挙する)を省略した言葉です。

文字通り定数を列挙するからこの名前が付けられています。

《VBA上級者になりたい人へ》
VBA上級者を目指したい人にはパーフェクトExcel VBA一択です。
この本を読み切れば間違いなくVBA上級者になれます。

VBAが難しいと感じたら
ココナラにてVBAの作成依頼を受け付けています。
ご依頼・ご相談はこちらから

VBA

Posted by やろまい