Excel VBAには、値の状態を判定するための関数として IsEmpty、IsNull、IsNothing が用意されています。しかし、この3つは似ているようで役割が異なり、誤った使い方をすると「正しく判定できない」「思っていた結果が返ってこない」という問題が起こります。
特に、実務では「セルが未入力かどうか」「変数が初期化されているか」「オブジェクトが参照を持っているか」などを正確に判定する必要があります。この3つの判定関数を理解することは、VBAでエラーの少ないコードを書く上で非常に重要です。
この記事では、IsEmpty・IsNull・IsNothing の違いを本質から解説し、実務に役立つ判定方法や落とし穴、応用例まで、体系的に解説します。
目次
- ✅ 【VBA】IsEmptyとは?未初期化のVariant型を判定する関数
- ・構文:IsEmpty
- ・IsEmptyが返すパターン
- ・IsEmptyの基本例
- ・IsEmptyはVariant型専用である点に注意
- ・セルを IsEmpty で判定するのはNG
- ・セルの空判定はこうすべき
- ✅ 【VBA】IsNullとは?Null(データなし)の判定を行う関数
- ・Nullとは?
- ・構文:IsNull
- ・IsNullが返すパターン
- ・IsNullの基本例
- ・Nullがやっかいな理由
- ・Null が必要な場面は?
- ・Nullの判定は If v = Null ではできない
- ・セルの空白はNullではない
- ✅ 【VBA】IsNothingとは?オブジェクト変数の参照があるかどうかを判定
- ・構文:IsNothing
- ・Nothingとは?
- ・オブジェクトが存在するかどうかを判定する例
- ・Nothingの典型例:Workbookの解放
- ▼ IsNothing と IsEmpty / IsNull の違いを整理
- ▼ 使用するべき場面まとめ
- ✅ 【VBA】実務で起こりやすい勘違いと落とし穴
- ・落とし穴1:IsEmptyはVariant以外ではほぼ使えない
- ・落とし穴2:セルの空判定に IsEmpty は不適切
- ・落とし穴3:Null は Excel セルには通常入らない
- ・落とし穴4:NothingとNullは全く別物
- ✅ 【VBA】実務で役立つ判定ロジック集
- ・セルが空かを正確に判定する
- ・変数が未初期化かを判定する(Variant限定)
- ・Recordset の Null 判定
- ・オブジェクトが参照を持っているか確認する
- ✅ 【VBA】3つの判定関数を使い分ける実務例
- ・例:シート名を取得し、安全に処理する
- ・例:入力フォームのチェック
- ・例:データベースの Null を正しく扱う
- ✅ 【VBA】RPA(UiPath)との併用で知っておくと便利なポイント
- ✅ まとめ:IsEmpty / IsNull / IsNothing を正しく理解して堅牢なコードを作ろう
✅ 【VBA】IsEmptyとは?未初期化のVariant型を判定する関数
IsEmptyは、「値が未設定(未初期化)のVariant型」を判定する関数です。
・構文:IsEmpty
IsEmpty(値)
・IsEmptyが返すパターン
| 値 | 結果 | 理由 |
|---|---|---|
| Variant型の未初期化変数 | True | 初期化されていない |
| ""(空文字) | False | 初期化済み |
| 0 | False | 初期化済み |
| Empty と明示的に代入 | True | Emptyは未初期化扱い |
・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が返すパターン
| 値 | 結果 | 理由 |
|---|---|---|
| Null | True | Nullの判定 |
| "" | False | 空文字は値が存在する |
| 0 | False | 0はデータが存在する |
| Empty | False | Emptyと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の未初期化 | IsEmpty | Empty または未設定 |
| Null(値が存在しない) | IsNull | Null 値 |
| オブジェクトの参照 | 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の品質や安定性は、このような「状態判定」を正しく行えるかで大きく変わります。ぜひ今回の解説を参考に、実務で応用しながら理解を深めてください。