AccessのNullについてお探しですね。
広告
Accessの「Null」と「空文字」の違いを理解して、空白データを正しく抽出しよう
Microsoft Accessでデータベースを管理していると、「空白のデータを抽出したいのに、なぜかうまくいかない…」という経験、ありませんか?実は、その原因の多くは「Null(ヌル)」と「空文字(からもじ)」という2つの違いを混同していることにあります。
この記事では、AccessにおけるNullと空文字の違いから、クエリでの正しい抽出方法、実務で使える便利なテクニックまで、わかりやすく解説していきます。
「Null」と「空文字」って何が違うの?
Accessのテーブルで空白に見えるセルには、実は「Null」と「空文字」という2つの状態があります。
見た目は同じ空白なのに、データベースの中では全く別物として扱われているんです。
**Nullとは**、「データがまだ何も入力されていない、値が存在しない状態」のこと。
一方、**空文字**は「文字数がゼロの文字列が入力されている状態」で、プログラム的には「長さのない文字データ」として認識されています。
これを日常生活で例えるなら、こんな感じです。
– **Null**:テーブルの上に箱すら置かれていない状態
– **空文字**:テーブルの上に空っぽの箱が置かれている状態
箱自体が存在しないのか、それとも中身が空の箱があるのか、という違いですね。
どんな時にNullや空文字になるの?
Accessでは、こんな場面でNullや空文字が生まれます。
– **新しいレコードを作った直後**:Nullになりやすい
– **入力した文字をBackspaceやDeleteで消した時**:空文字になりやすい
– **Excelなど他のシステムからデータをインポートした時**:システムの違いでNullと空文字が混在することがよくある
見た目だけでは区別がつかないのですが、クエリでデータを抽出したり集計したりする時に、この違いが大きな影響を与えます。
まずは「空白には2種類ある」ということを覚えておきましょう。
クエリで「Null」を抽出する正しい方法
データが存在しない「Null」の状態を抽出するには、専用の書き方があります。
クエリのデザイン画面で、抽出条件の欄に「**Null**」と入力してEnterキーを押すと、Accessが自動的に「**Is Null**」という形に変換してくれます。
これが、未入力のデータを正しく判定する方法です。
逆に、データが入力されている(Nullではない)レコードを抽出したい時は、「**Is Not Null**」と書きます。
よくある間違い:「=Null」はダメ!
多くの人がやってしまう失敗が、抽出条件に「**=Null**」と書いてしまうこと。
実は、Accessをはじめとするデータベースでは、Nullは「値を持たない未知の状態」なので、イコール記号で比較することができないんです。
「未知のもの」と「未知のもの」が等しいかどうかは判断できない、というデータベースの考え方があるため、「=Null」と書いてもエラーにはなりませんが、結果として1件もデータが抽出されません。
**大切なポイント**:Nullを判定する時は、どんな場面でも必ず「**Is Null**」を使いましょう。
IIF関数などの計算式の中でも同じです。
クエリで「空文字」を抽出する正しい方法
文字数がゼロの「空文字」を抽出する場合は、Nullとは違う書き方をします。
空文字はAccessで「**””**(ダブルクォーテーション2つ)」で表現されるので、クエリの抽出条件には「**=””**」と入力します。
これで、空文字が入っているレコードだけを抽出できます。
逆に、空文字を除外して何か文字が入っているものだけを抽出したい時は、「**<>””**」(等しくない、という意味)を使います。
注意!Nullと空文字は別々に抽出される
ここが重要なポイントです。
**Nullと空文字は、見た目は同じ空白なのに、お互いの抽出条件では引っかかりません**。
– 「Is Null」で抽出した結果には、空文字のレコードは含まれない
– 「=””」で抽出した結果には、Nullのレコードは含まれない
「空白のデータを全部抽出したはずなのに、なぜか漏れている…」という時は、Nullと空文字の条件が合っていない可能性が高いです。
特に、複数の人が手作業でデータを入力しているテーブルでは要注意。
人によってデータの消し方が違うと、見た目は同じ空白でも、中身はNullと空文字がバラバラに混ざっている状態になります。
Nullと空文字をまとめて抽出する便利なテクニック
実際の業務では、Nullと空文字が混在しているケースがとても多いです。
「見た目が空白のレコードを全部抽出したい」という時に使える、便利な方法を紹介します。
方法1:Orでつなげるシンプルな方法
クエリの抽出条件に「**Is Null Or “”**」と書くのが、一番わかりやすい方法です。
これで、Nullと空文字の両方を一度に抽出できます。
または、抽出条件の行を分けて書くこともできます。
– 1行目に「Is Null」
– 2行目に「=””」
どちらも同じ結果になります。
方法2:関数を使った高度なテクニック
演算フィールドを作ったり、複雑な条件分岐をしたりする時に便利な方法もあります。
**Nz関数を使う方法**
“`
Nz([フィールド名], "") = ""
“`
Nz関数は、値がNullだった場合に別の値に変換してくれる便利な関数です。
この書き方だと、Nullを空文字に変換してから判定するので、Nullも空文字もまとめて「空文字」として扱えます。
**Len関数を使う方法**
“`
Len([フィールド名] & "") = 0
“`
Len関数は文字数を数える関数です。
フィールドの値に空文字を結合してから文字数を測ることで、Nullでもエラーが出ずに「文字数が0」と判定できる仕組みです。
どの方法を使えばいいの?
– **データ量が多い場合(数万件以上)**:「Is Null Or “”」の方が処理が速い傾向があります
– **VBAやレポートで複雑な条件分岐をする場合**:Nz関数やLen関数が便利です
データの規模や使う場面に合わせて、最適な方法を選んでみてください。
まとめ
Nullと空文字の違いを理解すれば、「空白データの抽出がうまくいかない」という悩みから解放されます。
最初は少し難しく感じるかもしれませんが、慣れてしまえば簡単です。
ぜひ実際のAccessで試してみてくださいね!
広告
