Excel VBA 逆引き集 | Null相当の扱い

Excel VBA
スポンサーリンク

Null相当の扱い

Excel VBAでは「Null」という値はデータベース由来の特殊な値で、普通のセルや変数ではあまり使われません。ですが「空欄」「未設定」「Nothing」「Empty」など、“Null相当”の状態をどう扱うかは初心者がよくつまずくポイントです。ここではそれぞれの違いと、実務での安全な扱い方をコード例と一緒に解説します。


Null相当の種類と違い

状態説明判定方法例
Empty変数が初期化されていない状態(Variant型の初期値)IsEmpty(x)
Nothingオブジェクト変数が何も参照していない状態If obj Is Nothing Then ...
“”文字列が空(セルが空欄を読み込んだ場合など)If str = "" Then ...
Nullデータベース由来の「値が存在しない」状態(Variant型でのみ保持可能)IsNull(x)
  • セルの空欄を読み込むと、通常は ""(空文字)や Empty になります。
  • オブジェクト変数(Range, Workbookなど)は「参照がない」=Nothing
  • ADO/DAOでDBを扱うときNull が出てくることがあります。

基本テンプレ:セルの空欄を安全に判定

Sub CheckCellEmpty()
    Dim ws As Worksheet: Set ws = Worksheets("Sheet1")
    Dim v As Variant: v = ws.Range("A1").Value

    If IsEmpty(v) Or v = "" Then
        MsgBox "セルは空欄です"
    Else
        MsgBox "セルには値があります: " & v
    End If
End Sub
VB
  • ポイント
    • IsEmpty="" を併用すると「空欄」「未入力」を確実に判定できる。
    • 数値セルが空欄なら IsEmpty が真になる。

オブジェクトのNull相当(Nothing)の判定

Sub CheckObjectNothing()
    Dim ws As Worksheet
    'Set ws = Worksheets("Sheet1") 'コメントアウトすると未設定

    If ws Is Nothing Then
        MsgBox "オブジェクトは参照されていません(Nothing)"
    Else
        MsgBox "参照中のシート名: " & ws.Name
    End If
End Sub
VB
  • ポイント
    • オブジェクト変数は必ず Is Nothing で判定。
    • 未設定のまま使うと「オブジェクト変数が設定されていません」エラーになる。

データベース由来のNull判定(IsNull)

Sub CheckDatabaseNull()
    Dim v As Variant
    v = Null  '擬似的にNullを代入

    If IsNull(v) Then
        MsgBox "値はNullです(DB由来の未設定)"
    Else
        MsgBox "値は存在します"
    End If
End Sub
VB
  • ポイント
    • Null は Variant型でのみ保持可能。
    • 普通のセル値では出てこないが、ADO/DAOでレコードセットを扱うときに出る。

Null相当を安全に扱う共通関数(テンプレ)

Function IsNullLike(v As Variant) As Boolean
    'セル空欄、Empty、Null、空文字をまとめて判定
    If IsNull(v) Then
        IsNullLike = True
    ElseIf IsEmpty(v) Then
        IsNullLike = True
    ElseIf VarType(v) = vbString And v = "" Then
        IsNullLike = True
    Else
        IsNullLike = False
    End If
End Function
VB
  • 使い方例
Sub Example_UseIsNullLike()
    Dim ws As Worksheet: Set ws = Worksheets("Sheet1")
    Dim v As Variant: v = ws.Range("A1").Value

    If IsNullLike(v) Then
        MsgBox "A1はNull相当(空欄や未設定)です"
    Else
        MsgBox "A1には値があります: " & v
    End If
End Sub
VB

よくある落とし穴と対策

  • If v = "" だけだと数値セルの空欄を拾えない
    IsEmpty も併用する。
  • オブジェクト変数を未設定のまま使う
    If obj Is Nothing Then で必ずチェック。
  • DBのNullをそのまま計算に使うとエラー
    Nz 関数(Access VBA)や IIf(IsNull(v),0,v) で補完。
  • 文字列と数値の混在
    VarType を見て型ごとに処理を分けると安全。

例題で練習

'例1:セルが空欄かどうか判定
Sub Example_CellEmpty()
    CheckCellEmpty
End Sub

'例2:オブジェクト変数がNothingか判定
Sub Example_ObjectNothing()
    CheckObjectNothing
End Sub

'例3:DB由来のNullを判定
Sub Example_DBNull()
    CheckDatabaseNull
End Sub

'例4:共通関数でNull相当をまとめて判定
Sub Example_NullLike()
    Example_UseIsNullLike
End Sub
VB
タイトルとURLをコピーしました