【ExcelVBA入門】列挙型変数Enumとは?おすすめの使い方も徹底解説!

こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。

皆さんは、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は使いこなすと処理がわかりやすくなるので、とても便利です。使い方も簡単なので、ぜひ使ってみてくださいね!

この記事を書いた人

北海道出身の30歳で、フリーランスエンジニア兼テックライターとして活動中。新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。

Webアプリ、業務アプリ開発において、要件定義 ~ 運用保守まで様々な経験あり。また3歳の娘がいる1児のパパで、日々娘との時間を確保するために仕事を頑張っています!
侍エンジニアでは、【誰でもわかるレベルのわかりやすさ】を意識して、記事を執筆中。

目次