目次
はじめに
VBAでVariant型の変数が空かどうかを判定する際、= ""と書いていませんか?実は= vbNullStringを使う方が効率的で、VBAの標準的な書き方として推奨されています。この記事では、両者の違いとvbNullStringを使うべき理由を解説します。
空文字列の判定方法の比較
Variant型の変数が空文字列かどうかを判定する方法は、主に2つあります。
' パターン1: ダブルクォーテーションを使う
If myValue = "" Then
' パターン2: vbNullStringを使う
If myValue = vbNullString Then
どちらも空文字列を判定できますが、内部的な動作には違いがあります。""は2つのダブルクォーテーション文字を使って空文字列を表現していますが、vbNullStringはVBAが用意している定数で、より効率的な判定が可能です。
vbNullStringを使うべき理由
【理由1】メモリ効率が良い
""を使った場合、VBAは空文字列用のメモリ領域を毎回確保します。一方、vbNullStringは定数として定義されているため、メモリの確保が不要です。
1回の処理では違いを感じませんが、ループ処理で何千回も判定する場合は、vbNullStringの方が処理速度とメモリ使用量の面で有利になります。
【理由2】VBAの標準的な書き方
Microsoftの公式ドキュメントやVBAの参考書でも、空文字列の判定にはvbNullStringを使うことが推奨されています。他の人が見たときに「VBAの作法に従っている」と分かるため、可読性(読みやすさ)も向上します。
【理由3】意図が明確になる
= ""だと、「本当に空文字列を意図しているのか」「書き忘れではないのか」と迷うことがあります。vbNullStringと書くことで、「明示的に空文字列を判定している」という意図が伝わりやすくなります。
実際のコード例で確認
実際に動作を確認できるコードを用意しました。以下のコードを新しいExcelブックの標準モジュールに貼り付けて実行してみてください。
Sub 空文字列判定のテスト()
Dim testValue As Variant
' 空文字列を代入
testValue = ""
' パターン1: ""で判定
If testValue = "" Then
Debug.Print "パターン1: 空文字列です"
End If
' パターン2: vbNullStringで判定
If testValue = vbNullString Then
Debug.Print "パターン2: 空文字列です"
End If
' 空白文字(スペース)の場合
testValue = " "
If testValue = vbNullString Then
Debug.Print "スペースは空文字列ではありません(表示されない)"
Else
Debug.Print "スペースは空文字列として判定されません"
End If
End Sub
このコードを実行すると、イミディエイトウィンドウに結果が表示されます。パターン1とパターン2は同じ結果になりますが、vbNullStringを使う方が推奨される書き方です。
注意点として、vbNullStringは「長さがゼロの文字列」を判定します。スペースやタブ文字が入っている場合は、空文字列として判定されません。空白文字を含めて「空」と判定したい場合は、Trim関数と組み合わせて使います。
【実務でよくあるパターン】セルの値を判定する
Excelのセルが空かどうかを判定する場合も、vbNullStringが便利です。
Sub セルの空判定()
Dim targetCell As Range
Set targetCell = Range("A1")
' セルが空文字列かどうか判定
If targetCell.value = vbNullString Then
Debug.Print "A1セルは空です"
targetCell.value = "データを入力してください"
Else
Debug.Print "A1セルには値があります: " & targetCell.value
End If
End Sub
このコードは、A1セルが空の場合にメッセージを入力します。= ""でも動作しますが、vbNullStringを使う方がVBAらしい書き方になります。
【補足】IsEmpty関数との使い分け
Variant型の変数には、IsEmpty関数を使う方法もあります。
If IsEmpty(myValue) Then
IsEmptyは「変数が初期化されていない状態」を判定する関数です。一度でも値を代入した後は、空文字列を代入してもIsEmptyはFalseを返します。そのため、「明示的に空文字列かどうか」を判定したい場合は、= vbNullStringを使う方が適切です。
まとめ
Variant型の空判定には= vbNullStringを使うのがおすすめです。処理効率が良く、VBAの標準的な書き方として広く認知されているため、他の人が読んだときにも理解しやすいコードになります。