VBA関数の$ドルマークの意味

$が付くVBA関数

VBA関数の中にはLeft$関数のように$が付くものがあります。

先に答えを書いてしまいますが、$がない関数を使ってください

$ありを使うとNull判定処理が必要になるのが主な理由です。

$ありの関数は「文字列を返す」という意味です。

これは過去のBASIC時代の考え方でマークに意味を持たせていたことに由来します。

$は文字列、%は整数、&は長整数などです。

このマークの考え方がVBAにも残っていることが$ありの関数に繋がっています。

VBAでは変数にマークを付けることが出来ます。

String型には$、Integer型に%、Long型に&、Single型に!、Double型に#、Currency型に@を付けて、「Dim str$」とか「Dim cnt&」などと記述する「型宣言文字」があり、マークから型を推論できるようになっています。

型宣言でAs Stringなどと書かなくても$を付けるとString型と認識されます。

実際に各マークを付けたVBAのコードもちゃんと動作します。

実行結果

しかし今ではこんな書き方をすることはまず無いでしょう。

私は見たことありません。

ここで書いたのが初めてです。

$がある関数とない関数の違い

$がある関数とない関数の違いは定義を見ると分かります。

文字列操作系の$が付く関数を定義も含めて挙げてみます。

17個あります。

$がついていない関数は以下になります。

$がついていない関数は戻り値が定義されていません。これは書き忘れではなく未定義になります。未定義ということはVariant型を返すということです。

つまり、$が付く関数はString型で返し、$が付かない関数はVariant型で返すという違いになります。また、$が付く関数は引数にNullを渡すと「実行時エラー94(Nullの使い方が不正です。)」が発生しますが、$が付かない関数はエラーになりません。

その他、$が付く関数やプロパティ

他にも以下の関数やプロパティがあります。考え方は上と同様です。

$ありと$なしの処理速度の違い

$あり関数と$なし関数では処理速度がどれぐらいあるのかを調べてみると、全く変わりませんでした。

以下のコードを$ありとなしでそれぞれ10回ずつ実行したのですが、$ありの平均が152.2748ミリ秒、$なしの平均が152.8338ミリ秒と誤差の範囲の違いしか出ていません。

たまに、$あり関数の方がStringに特化しているため効率化により処理速度は速い、と書いてあるサイトがあるのですが、実際には差はありません。メモリ効率はいいかもしれませんが、最近のPCではまず関係ありませんね。

これからも$あり関数を使う必要性がまずないことが分かります。

なお、処理の計測には「VBAでミリ秒やマイクロ秒の計測を行う」で紹介しているミリ秒計測の関数を使っています。

関連記事

サブコンテンツ

このページの先頭へ