VBAでは、値の状態に応じて適切な判定方法を使い分ける必要があります。
特に Null、Empty、""(空文字)、Nothing は混同しやすく、誤った条件式はバグにつながります。
本記事では、VBA初心者から実務者まで役立つように、各判定の意味・使い方・違い・チェック例を体系的に解説します。
目次
1. VBAの値判定に使う関数一覧
まずは、よく使う判定関数の全体像を把握しましょう。
| 判定内容 | 関数 / 演算子 | 説明 |
|---|---|---|
| Null判定 | IsNull() | 値が存在しない(DB用) |
| Empty判定 | IsEmpty() | 変数が未代入 |
| 空文字判定 | x = "" | 値として空文字が格納 |
| オブジェクト判定 | Is Nothing | オブジェクトが未セット |
| 数値判定 | IsNumeric() | 数値または数字文字列か |
| 日付判定 | IsDate() | 日付として解釈できるか |
ポイント
Nullと""は同じではありません。かならず適切な判定関数を使用します。
2. Null判定(IsNull)|値が存在しない状態
◆ Nullとは?
DB値によくある「存在しない」状態
◆ 判定方法
Dim x As Variant
x = Null
If IsNull(x) Then
MsgBox "Nullです"
End If
❌ やってはいけない比較
If x = Null Then '← NG(Falseになってしまう)
3. Empty判定(IsEmpty)|値が未代入の状態
◆ Emptyとは?
Variant変数がまだ値を持っていない状態
Dim x As Variant 'Emptyになる
If IsEmpty(x) Then
MsgBox "Empty(未代入)です"
End If
◆ 型による違い
| 宣言 | 初期状態 |
|---|---|
Dim v As Variant | Empty |
Dim s As String | “”(空文字) |
4. 空文字判定(= “”)|文字データが空の状態
Dim s As String
s = ""
If s = "" Then
MsgBox "空文字です"
End If
| 状態 | 説明 |
|---|---|
| Empty | 値がまだ入っていない |
| “” | 値として空文字が入っている |
5. Nothing判定(Is Nothing)|オブジェクトが未設定
◆ Nothingとは?
オブジェクトがセットされていない状態
Dim wb As Workbook
Set wb = Nothing
If wb Is Nothing Then
MsgBox "Workbookオブジェクトがありません"
End If
=ではなくIsを使います。
6. 数値・日付の判定(IsNumeric / IsDate)
◆ 数値判定
If IsNumeric("123") Then MsgBox "数値です"
◆ 日付判定
If IsDate("2024/01/01") Then MsgBox "日付です"
7. 「値が入っているか」総合チェック関数(実務向け)
フォーム入力チェックや汎用関数に使える例:
Function HasValue(v) As Boolean
HasValue = (Not IsNull(v)) _
And (Not IsEmpty(v)) _
And (v <> "")
End Function
8. Null・Empty・空文字・Nothingの違いまとめ
| 状態 | 例 | 判定方法 | 主な用途 |
|---|---|---|---|
| Null | 値が存在しない | IsNull() | DB |
| Empty | 未代入 | IsEmpty() | Variant初期値 |
| “” | 空文字 | = "" | 入力文字列 |
| Nothing | オブジェクトなし | Is Nothing | Set対象 |
9. 実務での注意ポイント
- DB値は必ず
IsNull()を使う - Variant以外は
IsEmpty()にならない - 空文字(””)は値がある状態
- オブジェクトは
Is Nothingで判定
10. まとめ
VBAの値判定は、用途ごとに正しい関数を使うことが重要です。
- Null →
IsNull - Empty →
IsEmpty - 空文字 →
"" - Nothing →
Is Nothing
この記事の判定リストを参考に、入力チェック・DB処理・オブジェクト操作を安全に実装しましょう。
コメント