【VBA】Enumの使い方(列数はEnumがおすすめ)
今回はEnum(列挙体)の使い方を紹介します。
ざっくりですが、Enumは定数をまとめて宣言できるものとイメージしてください。
そんなの使うかなと感じるかもしれませんが、これはセルの列数を指定するのにとても重宝します。
もし、Cells(1, 3)といったセル指定をよくしているなら、Enumについて学んでみてください。
普段のコード作成と修正がとても楽になりますよ。
この記事では↓の内容が分かります。
- Enumの使い方
- Enumの注意点
- 列数にEnumを使うメリット
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(列挙する)を省略した言葉です。
文字通り定数を列挙するからこの名前が付けられています。