こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。
皆さんは、VBAで列強型変数Enumを使ったことがありますか? Enumは使い方・使いどころをしっかりおさえれば、とても便利な変数なので覚えておくと便利です。
そこで今回は、
- 列挙型変数 Enumとは
といった基礎的なことから、
- おすすめのEnumの使い方とは
- 合わせて覚えると便利な連想配列とは
といった応用的な方法まで、徹底的に解説します!
列挙型変数 Enumとは
はじめに、列挙型変数Enumについて簡単に解説します。Enumは、複数の数値を1つの変数名で扱うための方法です。「Enum変数名.子要素の名前」でデータを扱うことができるため、直感的にわかりやすく数値のデータを扱うことができます。
Enumの作り方・作ったデータを使う方法は次のとおりです。Enum変数の作り方:
Enum Enum変数名 子要素の名前1 = 値1 子要素の名前2 = 値2 子要素の名前3 = 値3 End Enum
Enum変数の使い方:
Enum変数名.子要素の名前1 Enum変数名.子要素の名前2 Enum変数名.子要素の名前3
また、Enumを作るときに最初の子要素のみに数値を指定すれば、自動的に2つ目以降は1ずつ数値を足した値が設定されます。Enumが1ずつ増えるサンプルコード:
'プロフィールデータの列NoのEnum Enum testEnum Val1 = 1 Val2 Val3 End Enum Sub Test() 'Enumの値を確認 Debug.Print "testEnum.Val1:" & testEnum.Val1 Debug.Print "testEnum.Val2:" & testEnum.Val2 Debug.Print "testEnum.Val3:" & testEnum.Val3 End Sub
Test実行結果:
testEnum.Val1:1 testEnum.Val2:2 testEnum.Val3:3
ただ、Enumを使ったことがない方がいると処理の内容がわかりづらいので、1ずつ増やした値を使う場合も次のように値を入れるのがおすすめです! Enumの子要素に値を全て入れたサンプルコード:
'プロフィールデータの列NoのEnum Enum testEnum Val1 = 1 Val2 = 2 Val3 = 3 End Enum Sub Test() 'Enumの値を確認 Debug.Print "testEnum.Val1:" & testEnum.Val1 Debug.Print "testEnum.Val2:" & testEnum.Val2 Debug.Print "testEnum.Val3:" & testEnum.Val3 End Sub
Test実行結果:
testEnum.Val1:1 testEnum.Val2:2 testEnum.Val3:3
ちょっとした配慮でコードは見やすくなるので、Enumを使う場合は子要素全てにに必ず数値を入れるのがおすすめです!
おすすめのEnumの使い方とは
ここまでEnumの使い方について解説してきましたが、
と思っている方も多いのではないでしょうか。そんな方向けに、おすすめのEnumの使い方を紹介します! 次のデータを見てください。
データを追加する場合、Cellsメソッドを使って次のように書けば値を追加することができます。
Cells(5,1).Value = 4 Cells(5,2).Value = "侍エンジニア4" Cells(5,3).Value = "VBA"
ただ、このコードだけではA列がNo、B列が名前、C列が得意言語になっていることがわからないですよね。シートを見ればわかるかもしれませんが、データの列が10列以上あった場合、どの列番号に何の値をいれればいいかわかりづらくなってしまいます。
そんな時は、Enumを使って子要素の名前で列番号を管理すれば、コードを見るだけで列番号を簡単に把握することができます!
Enum enmColumnsNo No = 1 Name = 2 GoodLang = 3 End Enum Sub Test() Cells(5,enmColumnsNo.No).Value = 4 Cells(5,enmColumnsNo.Name).Value = "侍エンジニア4" Cells(5,enmColumnsNo.GoodLang).Value = "VBA" End Sub
実行結果:
列番号を子要素の名前「No、Name、GoodLang」で使うことができるため、どのデータが何列目か意識せずにコードを書くことができます。
このように、行番号・列番号でデータを指定するようなケースでEnumはとても便利です!
合わせて覚えると便利な連想配列とは
ここまで、列挙型変数Enumの使い方について解説してきましたが、数値だけでなく文字列も同じように使いたいと思った方もいるのではないでしょうか。
Enumは数値しか使えませんが、文字列で同じような処理を使いたい場合はDictionayオブジェクト(連想配列)を使うのがおすすめです! Dictionaryオブジェクトは、データとキーをセットで格納するオブジェクトのことです。
Dictionaryオブジェクトを使ったサンプルコード:
Sub Test() 'Dictionaryオブジェクトの宣言 Dim myDic As Object Set myDic = CreateObject("Scripting.Dictionary") 'Dictionaryオブジェクトの初期化、要素の追加 myDic.Add "No", "No" myDic.Add "Name", "名前" myDic.Add "GoodLang", "得意言語" Debug.Print "キー「No」の値:" & myDic.Item("No") Debug.Print "キー「Name」の値:" & myDic.Item("Name") Debug.Print "キー「GoodLang」の値:" & myDic.Item("GoodLang") End Sub
実行結果:
キー「No」の値:No キー「Name」の値:名前 キー「GoodLang」の値:得意言語
「CreateObject(“Scripting.Dictionary”)」でDictionaryオブジェクトを作成し、「Dictionaryオブジェクト.Add キー,値」でデータを追加しています。
追加したデータは、「Dictionaryオブジェクト.Item(キー)」で使うことができるので、キーの名前で値を取り出すことができるのでとても便利ですね。
また、Dictionaryオブジェクトは値に文字列以外の値も使うことができるので、使い方を覚えておくととても便利です。詳しい使い方については以下で詳しく解説しているので、気になる方は見てみてくださいね!
まとめ
今回は、列挙型変数Enumの使い方について解説しました。Enumは使いこなすと処理がわかりやすくなるので、とても便利です。使い方も簡単なので、ぜひ使ってみてくださいね!