目次
アンド、ドルの記号
以前、どこかで、 Excel VBA のソースコードのサンプルを見ていた時に、変数宣言の記述の部分で、 Dim 変数名& , Dim 変数名$ のように、変数名の後ろに、アンド( & )、ドル( $ )の記号が付いている書き方を見たことがありました。当投稿では、この & , $ の記号が、何の意味を持っているのかを調べてみました。
型宣言文字
色々と調べて見た結果、アンド( & )、ドル( $ )の記号は、 VBA 言語の 型宣言文字というものらしく、 as Long , as String などのデータ型を指定する記述の代わりに使用できる文字のようです。
型宣言文字のアンド( & )は、長整数型( Long )、ドル( $ )は、文字列型( String )を示すようです。
長整数型( Long )の変数を宣言する際に「 Dim 変数名 as Long 」と書くところを「 Dim 変数名& 」と書いたり、「 Dim 変数名 as String 」と書くところを「 Dim 変数名$ 」と書いたりできるようです。
型宣言文字は、データ型ごとに以下の表のように決まっているようです。
データ型 | 型宣言文字 |
---|---|
文字列型 String | ドル $ |
長整数型 Long | アンド、アンパサンド & |
整数型 Integer | パーセント % |
通貨型 Currency | アット @ |
倍精度浮動小数点数型 Double | シャープ # |
単精度浮動小数点数型 Single | 感嘆符、エクスクラメーション ! |
型宣言文字を使用したマクロ
型宣言文字を使用したマクロを書いてみました。型宣言文字でデータ型を指定して、 TypeName 関数で変数の情報を取得してみます。
macro003847 のソースコード:
Sub macro003847()
Dim a$ '文字列型 ドル $
Dim b& '長整数型 アンド、アンパサンド &
Dim c% '整数型 パーセント %
Dim d@ '通貨型 アット @
Dim e# '倍精度浮動小数点数型 シャープ #
Dim f! '単精度浮動小数点数型 感嘆符、エクスクラメーション !
Debug.Print TypeName(a) 'TypeName 関数でデータ型を取得して、イミディエイトウィンドウに出力する。
Debug.Print TypeName(b)
Debug.Print TypeName(c)
Debug.Print TypeName(d)
Debug.Print TypeName(e)
Debug.Print TypeName(f)
End Sub
上記のマクロを実行した結果、 VBE のイミディエイトウィンドウに以下の内容が出力されました。それぞれ、型宣言文字で指定したデータ型になっているようです。
macro003847 のイミディエイトウィンドウへの出力結果:
String
Long
Integer
Currency
Double
Single
バリアント型の場合
データ型を指定しない場合は、バリアント型( Variant )の変数として宣言したことになるようです。以下のマクロでテストしてみたいと思います。
macro003847_2 のソースコード:
Sub macro003847_2()
Dim a 'データ型を指定しない場合はバリアント型になる。
Debug.Print TypeName(a) 'TypeName 関数でデータ型を取得して、イミディエイトウィンドウに出力する。
End Sub
実行結果は以下のようになりました。 Variant と出力されるものと予想していましたが、 Empty になっています。変数 a の中身の Empty が出力されているようです。 Empty は、変数が初期化されていない状態のようです。
Empty
変数 a に何かの値を代入すれば、 Variant と出力されるかもしれません。以下のマクロを試してみます。今度のマクロでは、変数 a に 0 の値を入れてみます。
macro003847_3 のソースコード:
Sub macro003847_3()
Dim a 'データ型を指定しない場合はバリアント型になる。
a = 0 '値を入れてみます。
Debug.Print TypeName(a) 'TypeName 関数でデータ型を取得して、イミディエイトウィンドウに出力する。
End Sub
結果は Integer となりました。
Integer
変数 a の中に格納されている実体?のデータの型を出力しているようです。試しに a="a" と代入する値を変更して、再度実行してみたところ、 String が出力されました。
バリアント型はどうなったのか。マクロを途中停止(ブレークポイントを設定)して、 VBE のローカルウィンドウで変数 a の情報を見てみます。
ブレークポイントの行でマクロが止まっていると思います。 VBE のローカルウィンドウで、変数 a の情報を確認してみます。変数 a の型の欄を見てみると、 Variant/Integer となっています。待望の?バリアント型がありました。 Integer と併用のようになっています。バリアント型の中に Integer 型の値を格納しているのかもしれません。
Variant 型のみにならないのは意味がありそうです。例えば、 Variant 型の変数の中に、 WorkSheet オブジェクトが格納されているとして、 WorkSheet オブジェクトのメソッドとプロパティが使用できたほうが良いので、 Variant 型のみにならず、 WorkSheet オブジェクトが包括されている状態の方が良いのかもしれません。私自身、明示的にデータ型を指定しない、何を指定すれば良いのか分からない場合が多々あるので、柔軟な処理、エラー回避が可能になっていると思いました。
補足ですが、 VarType 関数で、バリアント型の変数の中のデータのデータ型(内部処理の扱い)を取得できるようです。
参考情報
型宣言文字については、 Excel VBA のヘルプに記載がありました。 Excel 2003 ですが。
Excel VBE のマクロ編集画面で、変数宣言のデータ型( as String の場合は String )の部分にテキスト入力のカーソルを合わせて、 F1 キーを押すと、各データ型のヘルプが表示されると思います。そのヘルプの中に、型宣言文字の説明が書いてあると思います。
dim a as String
インターネット上では、以下の「 VBE の用語集」のページに記載がありました。 String , Long 型以外のデータ型の説明も書いてあると思います。
- VBE の用語集 - 型宣言文字
- https://msdn.microsoft.com/ja-jp/vba/language-reference-vba/articles/vbe-glossary#%E5%9E%8B%E5%AE%A3%E8%A8%80%E6%96%87%E5%AD%97
- 文字列データ型 | Microsoft Docs
- https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/string-data-type
- Long データ型 | Microsoft Docs
- https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/long-data-type
テスト環境
- Windows 10
- Microsoft Office Excel 2003
あとがき
型宣言文字を初めて見たときは、何の意味をもつのか、全くわかりませんでしたが、今回、調べてみて、ようやく、何となく分かったような気がします。
以上、閲覧ありがとうございました。