VBA Enumとは?VBA Enum(列挙型)の宣言の仕方・変数
- システム
エンジニア - VBA Enumをどう使えばいいのか悩んでいます。
- プロジェクト
マネージャー - では、VBA Enumについて基本から見ていきましょう。
VBA Enumとは?
VBAのEnumとは、Long型のConst定数に名前を付けて、それらをひとまとめにして参照しやすくしたものです。
例えば、色データとして赤=1、緑=2、青=3と番号を付け、これらの数値を直接VBAのコードに記述したとします。
これでも問題なく動作しますが、色データを変更する必要が出てきた時に、ひとつひとつすべてを変更するのは大変ですし、視認性もよくありません。このようなときに使用するのがEnum(列挙型)です。
Enum(列挙型)を使って定数を定義すると、数値を直接指定する代わりに定義した名前で指定できます。
また、意味のある名前を付けることでVBAプログラム(マクロ)の可読性も向上します。結果として、開発スピードの向上にも繋がります。
VBA Enum(列挙型)の宣言の仕方
VBA Enum(列挙型)の宣言の仕方は下のようになります。
「名前」には、列挙型の名前を付けます。この「名前」を使って変数を宣言できるようになります。
「メンバ名」は、任意の定数式(定数値)に付ける名前です。自分だけが分かる名前にしても良いですが、できれば他人が見ても分かりやすい名前を付けた方が良いでしょう。
「定数式」は、任意の定数値を指定します。この「定数式」を省略しますと「直前の値+1」(通し番号)が割り当てられます。
1
2
3
4
5
6
|
[Public | Private] Enum 名前
メンバ名1[= 定数式]
メンバ名2[= 定数式]
メンバ名3[= 定数式]
・・・
End Enum
|
VBA Enum(列挙型)変数
VBAでEnum(列挙型)を宣言すると、それを使って変数を宣言できるようになります。
列挙型変数は、Long型変数なので色々な整数値を入れられますが、基本的には定義されたメンバの値のみ代入するようにした方が良いでしょう。
下のサンプルプログラム(Sample1)は色データ列挙型(colorIndex)を宣言し、それを使って宣言した変数ciに色データenmGreenを代入してイミディエイトウィンドウに値を出力しているものです。
ここでは、変数ciにenmGreenを代入していますので、結果は【ci = 2】と表示されます。
1
2
3
4
5
6
7
8
9
10
11
12
|
Enum colorIndex '色データColorIndexを宣言
enmRed = 1 '赤(=1)
enmGreen '緑(=2)
enmBlue '青(=3)
End Enum
Sub Sample1()
Dim ci As colorIndex '列挙型変数を宣言
ci = enmGreen 'enmGreen = 2
Debug.Print "ci = " & ci 'イミディエイトウィンドウに出力
End Sub
|
VBA Enum(列挙型)メンバへのアクセス方法
VBAのEnum(列挙型)で宣言されたメンバにアクセスするには、上の項目でご紹介した変数を宣言する方法以外に、「名前.メンバ名」と記述してもアクセスが可能です。
下のサンプルプログラム(Sample2)は色データ列挙型(colorIndex)を宣言し、普通にLong型で宣言した変数lngに色データenmBlueを代入してイミディエイトウィンドウに値を出力しているものです。
ここでは、変数lngにenmBlueを代入していますので、結果は【lng = 3】と表示されます。
1
2
3
4
5
6
7
8
9
10
11
12
|
Enum colorIndex '色データColorIndexを宣言
enmRed = 1 '赤(=1)
enmGreen '緑(=2)
enmBlue '青(=3)
End Enum
Sub Sample2()
Dim lng As Long '普通のLong型変数
lng = ColorIndex.enmBlue '名前.メンバ名でアクセス
Debug.Print "lng = " & lng 'イミディエイトウィンドウに出力
End Sub
|
PrivateとPublicの違い
VBAにおいて、Privateで宣言したEnum(列挙型)は、宣言したモジュール内でのみ使用できます。それに対し、Publicで宣言したEnum(列挙型)はプロジェクト全体で使用できます。
VBAプログラム(マクロ)が比較的小さいうちは良いのですが、ある程度大きくなってくると、機能別にモジュールを分けて記述することが多くなります。
そのような時、そのモジュール内だけで参照できればよいEnum(列挙型)はPrivateで宣言し、すべてのモジュールで参照したいEnum(列挙型)はPublicで宣言するなどの使い分けができます。
VBA Enum(列挙型)の使い方
VBAのEnum(列挙型)の代表的な使い方として、Excelのセル(列)の指定があります。
列のデータは項目を増やしたり減らしたりする可能性がありますので、Enum(列挙型)を使って定義しておくと、後の修正が楽にできます。
例えば、列の項目に個人情報の「名前」「年齢」「身長」「体重」を設け、2行目にデータを設定するマクロを記述することを考えます。
これをプログラミングすると、以下に記載するサンプルプログラム(Sample3_1)のようになります。
そこへ「性別」という項目を新たに追加すると、サンプルプログラム(Sample3_2)のようになります。
Enum(列挙型)を用いることで、必要な項目を単純に追加するだけで簡単に修正できることが分かるでしょう。
サンプルプログラム Sample3_1
Excel VBAの個人情報登録サンプルプログラムの雛形です。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
Enum personalInfo
enmName = 1 '名前(=1)
enmAge '年齢(=2)
enmHeight '身長(=3)
enmWeight '体重(=4)
End Enum
Sub Sample3_1()
'1行目のタイトル
Cells(1, personalInfo.enmName) = "名前"
Cells(1, personalInfo.enmAge) = "年齢"
Cells(1, personalInfo.enmHeight) = "身長"
Cells(1, personalInfo.enmWeight) = "体重"
'2行目の個人データ
Cells(2, personalInfo.enmName) = "さんぷる 太郎"
Cells(2, personalInfo.enmAge) = 20
Cells(2, personalInfo.enmHeight) = 175.3
Cells(2, personalInfo.enmWeight) = 68.2
End Sub
|
サンプルプログラム Sample3_2
Excel VBAの個人情報登録サンプルプログラムの雛形に、「性別」を追加したプログラムです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
Enum personalInfo
enmName = 1 '名前(=1)
enmAge '年齢(=2)
enmGender '性別(=3) ← 追加
enmHeight '身長(=4)
enmWeight '体重(=5)
End Enum
Sub Sample3_2()
'1行目のタイトル
Cells(1, personalInfo.enmName) = "名前"
Cells(1, personalInfo.enmAge) = "年齢"
Cells(1, personalInfo.enmGender) = "性別" '← 追加
Cells(1, personalInfo.enmHeight) = "身長"
Cells(1, personalInfo.enmWeight) = "体重"
'2行目の個人データ
Cells(2, personalInfo.enmName) = "さんぷる 太郎"
Cells(2, personalInfo.enmAge) = 20
Cells(2, personalInfo.enmGender) = "男" ' ← 追加
Cells(2, personalInfo.enmHeight) = 175.3
Cells(2, personalInfo.enmWeight) = 68.2
End Sub
|
- システム
エンジニア - 子要素を使えば値の追加もできるのは便利ですね。
- プロジェクト
マネージャー - 列管理ができるのも大きな特徴ですね。
VBAのEnum(列挙型)は上手に使えばとても便利な機能!
VBAのEnum(列挙型)は、上手に使えばとても便利な機能です。また、他の言語(C++、C#、Pythonなど)にも同様な機能がありますので、ぜひ覚えて使用してみてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
新着案件New Job
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) -
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) -
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) -
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅) -
債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅) -
PMO/東京都豊島区/【WEB面談可】/在宅勤務
月給55万~55万円東京都豊島区(池袋駅)