VBAの$付きの文字列関数
VBAの文字列関数には$付きの物がありますが、ネットで見るコードではほとんど見かけません。Microsoftのサイトで関数を検索しても、出てくるのは$なしばかり。
何が違うのと言われれば、
VBA の文字列関数の中には 2 種類のバリエーションを持つものがあります。1 つは文字列を返し、もう 1 つは文字列型 (String) のバリアント値を返します。文字列を返す関数名にはドル記号 ($) が含まれます。たとえば、Chr$、Format$、LCase$、Left$、LTrim$、Mid$、Right$、RTrim$、Space$、Trim$、UCase$ などがあります。文字列型のバリアント値を返す関数にはドル記号は含まれません。これらの関数名は、Chr、Format、Lcase、Left、Ltrim、Mid、Right、Rtrim、Space、Trim、Ucase などになります。前者の関数はすばやく結果を返しますが、Null 値を使用して呼び出すとエラーが発生します。文字列型のバリアント値を返す関数では、Null 値を問題なく使用できます。
文字列の一部を返す | Microsoft Docs
2つの違いをざっくり言うと、
- 復帰値の型が異なる
- パフォーマンスが異なる(通常なら無視できるレベル)
- 文字列を取り出す元の文字列式で扱えるデータの型が異なる
です。
項目 | $付き | $なし |
---|---|---|
復帰値 | 文字列型 (String) | 文字列型 (String) のバリアント値 |
Null値対応 | 使用不可 | 使用可 |
Nullをパラメータとして渡した場合の違いはこんな感じ。
$なしは、エラーの発生もなく、Null(文字列ではない)を返している。
文字列ではないというのは、
? typename(Left(Null,2))
と実行すれば
Null
と返ってくることで確認できる。
$ありでは、実行時エラー '94'が発生している。
$ありなしでのパフォーマンスの比較は、以下のサイトで行われていたが
基本的には記述通り、$あり > $なし となっている。
代入先の変数の型で状況が変わるのは、なるほどといった感じ。
■T'sWare Access Labo #32 〜$付き関数のメリットとは?〜
別に、$付きでも$なしでも、どっちを使ってもいいんですよ。最終的に、正しい結果が得られるのであれば・・・
ちなみに私は、$付き派です。
「だから、どうした?」とか「どうして?」と聞かれても困りますが・・・