0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VBA初心者が知っておきたい空文字列判定のコツ【vbNullString】

0
Posted at

目次

  1. はじめに
  2. 空文字列の判定方法の比較
  3. vbNullStringを使うべき理由
  4. 実際のコード例で確認
  5. まとめ

はじめに

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は「変数が初期化されていない状態」を判定する関数です。一度でも値を代入した後は、空文字列を代入してもIsEmptyFalseを返します。そのため、「明示的に空文字列かどうか」を判定したい場合は、= vbNullStringを使う方が適切です。

まとめ

Variant型の空判定には= vbNullStringを使うのがおすすめです。処理効率が良く、VBAの標準的な書き方として広く認知されているため、他の人が読んだときにも理解しやすいコードになります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?