【Access】Null・空白・スペースの違いを解説

入門講習

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/空文字列/スペースをまとめて「未入力」と見なす方法。
タイトルとURLをコピーしました