目次

アンド、ドルの記号

以前、どこかで、 Excel VBA のソースコードのサンプルを見ていた時に、変数宣言の記述の部分で、 Dim 変数名& , Dim 変数名$ のように、変数名の後ろに、アンド( & )、ドル( $ )の記号が付いている書き方を見たことがありました。当投稿では、この & , $ の記号が、何の意味を持っているのかを調べてみました。

Excel VBA の型宣言文字。アンド(&)、ドル($)記号など。
Excel VBA の型宣言の際に、変数名の後ろに、アンド(&)記号、ドル($)記号などの文字が付いていることがあります。この意味を調べて見ました。

目次まで戻る

型宣言文字

色々と調べて見た結果、アンド( & )、ドル( $ )の記号は、 VBA 言語の 型宣言文字というものらしく、 as Long , as String などのデータ型を指定する記述の代わりに使用できる文字のようです。

型宣言文字のアンド( & )は、長整数型( Long )、ドル( $ )は、文字列型( String )を示すようです。

長整数型( Long )の変数を宣言する際に「 Dim 変数名 as Long 」と書くところを「 Dim 変数名& 」と書いたり、「 Dim 変数名 as String 」と書くところを「 Dim 変数名$ 」と書いたりできるようです。

型宣言文字は、データ型ごとに以下の表のように決まっているようです。

VBA の型宣言文字
データ型 型宣言文字
文字列型 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 型の値を格納しているのかもしれません。

VBE のローカルウィンドウの画面
変数 a の型は Variant/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

目次まで戻る

テスト環境

  • Windows 10
  • Microsoft Office Excel 2003

目次まで戻る

あとがき

型宣言文字を初めて見たときは、何の意味をもつのか、全くわかりませんでしたが、今回、調べてみて、ようやく、何となく分かったような気がします。

以上、閲覧ありがとうございました。

目次まで戻る

前後の投稿