VBAテクニック集 VBA一覧 変数・知識 文法・構文

【VBA】IsEmpty / IsNull / IsNothing の違いを徹底解説|未初期化・Null・Nothingを正しく見分けよう

Excel VBAには、値の状態を判定するための関数として IsEmpty、IsNull、IsNothing が用意されています。しかし、この3つは似ているようで役割が異なり、誤った使い方をすると「正しく判定できない」「思っていた結果が返ってこない」という問題が起こります。

特に、実務では「セルが未入力かどうか」「変数が初期化されているか」「オブジェクトが参照を持っているか」などを正確に判定する必要があります。この3つの判定関数を理解することは、VBAでエラーの少ないコードを書く上で非常に重要です。

この記事では、IsEmpty・IsNull・IsNothing の違いを本質から解説し、実務に役立つ判定方法や落とし穴、応用例まで、体系的に解説します。

目次

✅ 【VBA】IsEmptyとは?未初期化のVariant型を判定する関数

IsEmptyは、「値が未設定(未初期化)のVariant型」を判定する関数です。

・構文:IsEmpty

IsEmpty(値)

・IsEmptyが返すパターン

結果理由
Variant型の未初期化変数True初期化されていない
""(空文字)False初期化済み
0False初期化済み
Empty と明示的に代入TrueEmptyは未初期化扱い

・IsEmptyの基本例

Dim v As Variant
MsgBox IsEmpty(v)   ' True

値を代入するとFalseに変わります。

v = ""
MsgBox IsEmpty(v)   ' False

空文字は初期化されているためFalseです。


・IsEmptyはVariant型専用である点に注意

以下のコードで True を期待する人は多いですが、結果はFalseになります。

Dim s As String
MsgBox IsEmpty(s)  ' False

String型は初期化された時点で""がセットされているため、未初期化ではないという扱いです。

Variant型以外には、ほとんど利用できません。


・セルを IsEmpty で判定するのはNG

次の例は誤判定の原因になります。

If IsEmpty(Range("A1")) Then

セルが空白でも式が空文字を返している場合は False になります。

→ 実務では Empty をセル判定に使うのは危険です。

参考:【VBA】Nothingとは?オブジェクト変数の初期化と解放をわかりやすく解説


・セルの空判定はこうすべき

If Trim(Range("A1").Value) = "" Then

または

If Len(Range("A1").Value) = 0 Then

✅ 【VBA】IsNullとは?Null(データなし)の判定を行う関数

IsNullは、値が Null かどうかを判定するための関数です。

・Nullとは?

Nullは「値が存在しない状態」ですが、Emptyとは異なり、

  • 値が未設定
    ではなく
  • 値が「存在しない」ことを明示する特別な値

として扱われます。


・構文:IsNull

IsNull(値)

・IsNullが返すパターン

結果理由
NullTrueNullの判定
""False空文字は値が存在する
0False0はデータが存在する
EmptyFalseEmptyとNullは異なる
Nothingエラーオブジェクトは対象外

・IsNullの基本例

Dim v As Variant
v = Null
MsgBox IsNull(v)   ' True

・Nullがやっかいな理由

Null を含む演算や結合はすべて Null を返します。

MsgBox Null + 1        ' Null
MsgBox "A" & Null      ' Null

数値演算や文字列結合でエラーになるわけではなく、すべて Null が伝播してしまうため、データ処理のバグの原因になりがちです。

参考:【VBA】IsNumericの使い方|数値判定の基本と落とし穴を徹底解説




・Null が必要な場面は?

主にデータベース(Access / SQL)との連携で使用されます。

Excelの通常業務ではNullとEmptyの違いを気にしないことも多いですが、外部データ連携ではNullは避けられない概念です。


・Nullの判定は If v = Null ではできない

以下は常に False になります。

If v = Null Then

Nullは比較できず、必ず IsNull を使用します。


・セルの空白はNullではない

Range("A1").Value に Null が入ることは通常ありません。
Excelが空白を返す際は基本的に ""(空文字)です。


✅ 【VBA】IsNothingとは?オブジェクト変数の参照があるかどうかを判定

IsNothing は、オブジェクト変数が Nothing かどうかを判定するための関数です。

・構文:IsNothing

IsNothing(オブジェクト変数)

しかし重要なポイントとして、IsNothing は VBA の標準関数ではありません。
VBAでオブジェクトの有無を判定する場合は次の構文を使います。

If obj Is Nothing Then

・Nothingとは?

オブジェクト変数が何も参照していない状態で、

  • オブジェクトの初期化前
  • 解放後(Set obj = Nothing)

の2つの場面で使用されます。


・オブジェクトが存在するかどうかを判定する例

Dim ws As Worksheet

If ws Is Nothing Then
    MsgBox "参照なし"
End If

・Nothingの典型例:Workbookの解放

Dim wb As Workbook
Set wb = Workbooks.Open("C:\test.xlsx")

' --- 処理 ---

wb.Close False
Set wb = Nothing

解放しないと、Excelがファイルを握ったまま残る場合があります。


▼ IsNothing と IsEmpty / IsNull の違いを整理

判定対象使用する関数True になる状態
Variantの未初期化IsEmptyEmpty または未設定
Null(値が存在しない)IsNullNull 値
オブジェクトの参照obj Is Nothingオブジェクト未設定

▼ 使用するべき場面まとめ

状況使用する関数
「変数が初期化されていない?」IsEmpty
「データが存在しない(Null)?」IsNull
「オブジェクト参照が存在しない?」Is Nothing

✅ 【VBA】実務で起こりやすい勘違いと落とし穴

・落とし穴1:IsEmptyはVariant以外ではほぼ使えない

String型で IsEmpty を使うと False になり、誤判定につながります。


・落とし穴2:セルの空判定に IsEmpty は不適切

理由:空白でも空文字を返す場合があるため。


・落とし穴3:Null は Excel セルには通常入らない

Nullの判定は主にデータベース用途。


・落とし穴4:NothingとNullは全く別物

  • Null → 値の不在
  • Nothing → 参照の不在

同じ意味に見えて混同されがちですが、根本が異なります。


✅ 【VBA】実務で役立つ判定ロジック集

・セルが空かを正確に判定する

If Trim(Range("A1").Value) = "" Then

・変数が未初期化かを判定する(Variant限定)

Dim v As Variant
If IsEmpty(v) Then

・Recordset の Null 判定

If IsNull(rs!Name) Then

・オブジェクトが参照を持っているか確認する

If obj Is Nothing Then

✅ 【VBA】3つの判定関数を使い分ける実務例

・例:シート名を取得し、安全に処理する

Dim ws As Worksheet
Set ws = Nothing

On Error Resume Next
Set ws = Worksheets("Data")
On Error GoTo 0

If ws Is Nothing Then
    MsgBox "シートが存在しません"
    Exit Sub
End If

・例:入力フォームのチェック

Dim age As Variant
age = txtAge.Value

If IsEmpty(age) Then
    MsgBox "未入力です"
ElseIf Not IsNumeric(age) Then
    MsgBox "数値を入力してください"
End If

・例:データベースの Null を正しく扱う

If IsNull(rs!Address) Then
    address = "未登録"
Else
    address = rs!Address
End If

✅ 【VBA】RPA(UiPath)との併用で知っておくと便利なポイント

実務において、VBAとRPA(UiPathやPower Automate)を組み合わせるケースは増えています。
その際、次のような問題が起きやすいため、IsEmpty / IsNull / IsNothing の理解は役立ちます。

  • セルが空かどうかの判定でロボットが誤処理する
  • VBAの戻り値がNullになり、RPA側で例外発生
  • オブジェクト参照の解放不足でRPAがExcelを掴み続ける

特に、「Nothing と Null の違い」を理解するだけでトラブルを大幅に減らせます。


✅ まとめ:IsEmpty / IsNull / IsNothing を正しく理解して堅牢なコードを作ろう

  • IsEmpty → Variant型の未初期化を判定
  • IsNull → Null(値が存在しない状態)を判定
  • Is Nothing → オブジェクトの参照があるかを判定

それぞれ目的と対象が異なり、適切に使い分けることでコードの信頼性が大幅に向上します。

  • セルの空判定 → 値が "" かどうかで判断
  • データベース連携 → Null 判定が必要
  • オブジェクトの参照管理 → Nothing 判定は必須

VBAの品質や安定性は、このような「状態判定」を正しく行えるかで大きく変わります。ぜひ今回の解説を参考に、実務で応用しながら理解を深めてください。

    -VBAテクニック集, VBA一覧, 変数・知識, 文法・構文