Accessでは、「フィールドにデータが入っていないように見える」3つの状態があります。
例えば、次のテーブルには「データがない箇所」が3か所あります。

一見すると「ただ空白になっているだけ」のように見えますが、3つともシステム上は異なる仕組みで処理されています。具体的には、次の3種類です。
- Null … 値が存在しない状態
- 空文字列(””) … 値はあるが、文字数0
- スペース(” “) … 半角や全角スペースが入力された状態
実際に上図は以下のような状態になっています。
- 社員コード 1000000004 の空白 … 空文字列
- 社員コード 1000000007 の空白 … Null
- 社員コード 1000000011 の空白 … スペース
見た目では判別できないですよね。ですが、中身はまったくの別物なのです。
もし判定方法を間違えてしまうと、抽出漏れや計算エラーといったトラブルにつながりかねません。

例えば「空白を除く」という判定を行う際、
Null用の判定式を行うと空文字列は除かれません。
意図しない抽出結果は、業務へ影響与える場合がありますね。
この記事では、この3つの違いを整理し、それぞれの正しい使い分け方を解説していきます。
Null・空文字列・スペースの解説
Nullとは
定義
「値が存在しない状態」を表します。
特徴
- 数値型・テキスト型など、すべてのデータ型で扱える
- Nullと演算すると結果もNullになる(例:
5 + Null → Null) - 比較演算子(= や <>)では判定できない
判定方法
Is Null または Is Not Null を使用して判定する
例1:クエリの抽出条件で「メールアドレス」フィールドがNullとなっているものを抽出

【抽出結果】

クエリ以外の例(SQL、VBA)はこちらです。
例2:退職日が入力されていない社員を抽出する
SELECT * FROM T_社員管理テーブル WHERE 退社日 IS NULL;
例3:フォームのテキストボックス1が入力されていない場合、メッセージボックスを表示する
If IsNull(Me!テキストボックス1) Then
MsgBox "名前が入力されていません。", vbExclamation, "入力チェック"
Else
MsgBox "入力されています: " , vbInformation, "確認"
End If
空文字列(””)とは
定義
「長さ0の文字列」。値は存在するが、中身がない状態です。
特徴
- テキスト型のフィールドで使用可能(数値型では不可)
- 比較演算子(= “”)で判定できる
判定方法
「””(ダブルコーテーション)」で判定する。
例1:クエリの抽出条件で「電話番号」フィールドがNullとなっているものを抽出

【抽出結果】

クエリ以外の例(SQL)はこちらです。
例2:備考欄が入力されていないレコードを抽出する
SELECT * FROM T_顧客管理テーブル WHERE 備考 = "";
スペース(” “)とは
定義
半角や全角スペースが入力された文字列です。
特徴
- 見た目は空に見えるが、実際には文字数がある
- 値としての実態はあるので、
Len関数で確認すると、1文字以上とカウントされる
判定方法
「” ”(スペースをダブルコーテーションで囲む)」で判定する。
例1:クエリの抽出条件で「メールアドレス」フィールドにスペースが格納されているものを抽出

【抽出結果】

Null・空文字列・スペースの比較まとめ
前述で説明した各項目の要点をまとめると、以下のとおりです。
| 種類 | 値の有無 | データ型 | 判定方法 |
|---|---|---|---|
| Null | 値なし | 全データ型 | Is Null |
| 空文字列(“”) | 値あり(長さ0) | テキスト型のみ | [フィールド]=”” |
| スペース(” ”) | 値あり(長さ1以上) | テキスト型のみ | [フィールド]=” “ |
Null・空文字列・スペースが発生する仕組み
フィールドに格納されていたデータを削除した場合に、Nullになるのか、空文字列になるかはテーブルの設定内容で決まります。その辺りを抑えることで、意図しない状態を回避することができます。
Nullと空文字列
テーブルデザインで各フィールドの設定を行うには、プロパティ設定画面を操作します。
テーブルのプロパティ設定については、こちらの記事で詳しく解説しています。
今回着目する設定項目は「値要求」と「空文字列の許可」です。

「値要求」と「空文字列の許可」の「はい」と「いいえ」の組み合わせによって、データ削除後の状態が決定されます。詳しくはこちらの表をご覧ください。
| No | 値要求 | 空文字列の許可 | 値削除後のフィールド状態 |
|---|---|---|---|
| 1 | いいえ | いいえ | 値を削除 → Null |
| 2 | いいえ | はい | 値を削除 → 空文字列(””) |
| 3 | はい | いいえ | 値を消去不可 |
| 4 | はい | はい | 値を消去不可 |
No3とNo4の場合は、値要求を「はい」にしているため、そもそも格納されている値を消去できません(消去しようとするとエラーとなる)。

本ケースは、データ型がテキスト型の場合のみです。
数値型や日付/時刻型にはそもそも空文字列は発生しませんので、ご注意ください。
スペース
スペースが格納される原因は誤入力など、意図せずいつの間にか入っていたケースがほとんどだと思います。よって、通常はあまり気にする必要はありませんが、スペースを取り除く方法を知っていると、後々役立つと思います。
スペースを取り除く(Trim関数)
Trim関数は、値の前後に存在するスペースを取り除くことができます。
例1:Trim関数で「メールアドレス」フィールドに格納されているスペースを取り除く

【抽出結果】
スペースが取り除かれているので、抽出条件に(” ”)を指定しても抽出されません。
応用編
Null・空文字列・スペースのすべてをチェック値を判定する事例です。
Dim val As String
val = Nz(Me!テキスト1, "") ' Null を "" に変換
If val = "" Or Trim(val) = "" Then
MsgBox "名前が未入力です。", vbExclamation, "入力チェック"
Else
MsgBox "入力されています" , vbInformation, "確認"
End If
【解説】
- 2行目:
Nz関数を使い、テキスト1がNull値であれば空文字列(””)に変換して、変数valに代入。 - 4行目~8行目:
Trim関数でスペースを取り除いた変数valと、元々の変数valが空文字列かどうかで、メッセージ表示を切り替えています。

こういった対策を打っておけば、チェック漏れも起きにくい訳ですね!
まとめ
最後に記事の要点をまとめます。
見た目は同じでも状態が3種類ある
Null(値が存在しない)、空文字列(””)、スペース(” “)の3つ。見た目だけでは区別できないが、中身が違う。
実務で間違いやすい点
- 抽出条件を Null 判定のみで設定すると、空文字列やスペースは除外されず意図しないレコードが残る。
- テーブルのプロパティ設定(「値要求」「空文字列の許可」)によって、削除時のフィールド状態(Null になるか空文字列になるか等)が変わる。
- 数値型や日付型では空文字列は発生しない。テキスト型のみ該当。
対策・活用方法
- Trim関数 を使って前後のスペースを除く。スペースの影響を軽減する。
- Nz関数 を使って、Null を空文字列に置き換えて処理を統一するパターン。例えば入力チェックで Null/空文字列/スペースをまとめて「未入力」と見なす方法。



