名前、定数、列挙体(Excel)
名前、定数、列挙体
ちょっと、PINK FLOYDっぽいタイトルだったのでつい……。
名前、定数、列挙体に同じ文字列を使ってみる
ワークシートのA1、A2、A3セルに、それぞれ「aho」、「baka」、「kasu」と名前をつけておく。
んで、次のように定数と列挙体を定義しておく。
リスト1 標準モジュール宣言セクション
Option Explicit Private Const kasu As String = "カス" '……(1)' Private Enum Hoge aho = 1 End Enum Private Enum Hage aho baka kasu End Enum
そして、次のようなコードを用意する。
リスト2 標準モジュール
Public Sub testNameConstEnum() Debug.Print aho '……(2)' Debug.Print Hoge.aho Debug.Print Hage.aho Debug.Print Sheet7.Range("aho").Value Debug.Print Sheet7.Range("baka").Value Debug.Print Sheet7.Range("kasu").Value Debug.Print baka Debug.Print kasu End Sub
これを実行してみる。
すると、いきなり
定数名が不適切である旨、エラーが出る。
仕方がないので、(1)の
Private Const kasu As String = "カス"
をコメントアウトして再度実行。すると、今度は
と、(2)の
Debug.Print aho
のところでエラー。
これは当り前。単に「aho
」としたのでは、列挙体Hoge
の方なのか、Hage
の方なのかが解決できないのだから。
よって、(2)もコメントアウトして三度実行。
今度はエラーが出ずに完走し、
1
0
ち~んw
( ´,_ゝ`)プッ
(゚Д゚)ハァ?
1
2
と出力された。
結論
定数と列挙体が被るのはアウト
最初にいきなりエラーが出たことからも分かるように、定数名と列挙体の要素名が被るのはダメみたい。
実は、こないだこれでしばらくハマった。
名前と列挙体は被ってもよい
Debug.Print Sheet7.Range("baka").Value
の「baka
」はセルに付けた名前、
Debug.Print baka
の「baka
」は、列挙体の要素名として、ちゃんと区別されている。
「kasu
」についても同じ。
定数と名前は被ってもよい
定数「kasu
」のコメントアウトを解除し、列挙体「Hage
」の要素「kasu
」をコメントアウト、つまり、
Private Const kasu As String = "カス" Private Enum Hoge aho = 1 End Enum Private Enum Hage aho baka End Enum Public Sub testNameConstEnum() Debug.Print Hoge.aho Debug.Print Hage.aho Debug.Print Sheet7.Range("aho").Value Debug.Print Sheet7.Range("baka").Value Debug.Print Sheet7.Range("kasu").Value Debug.Print baka Debug.Print kasu End Sub
この状態で実行すると、
このとおり、意図どおりに出力された。
Debug.Print Sheet7.Range("kasu").Value
の「kasu
」はセルの名前、
Debug.Print kasu
の「kasu
」は定数として、ちゃんと区別されている。
おわりに
名前、定数、列挙体をうまく使い分けましょう。