AccessのNull判定の方法をお探しですね。
広告
Accessのクエリで空白や0以外のデータを抽出する方法を分かりやすく解説
Accessでクエリを作っていて、「空白じゃないデータだけ抽出したい」とか「0以外の数字だけ表示したい」と思って条件を設定したのに、なぜか空っぽに見えるデータが残ってしまった…そんな経験はありませんか?
実は、Accessでは見た目が同じ「空白」でも、中身が全然違うことがあるんです。
この違いを知らないと、いくら条件を工夫してもうまく抽出できません。
この記事では、Null・空文字列・スペース・0の違いを整理しながら、クエリで正しく抽出する方法を初心者の方にも分かりやすく説明していきます。
まず知っておきたい!Accessの「空白」は3種類ある
Excelを使っている人なら、空白といえば「何も入力していないセル」をイメージすると思います。
でもAccessでは、見た目が空白でも実は3つの違う状態があるんです。
**1つ目は「Null(ヌル)」**です。
これは「値そのものが存在しない」状態を表します。
たとえば、まだ退職していない社員の「退職日」や、電話番号を聞いていないお客さんの「電話番号」欄などがこれにあたります。
本当の意味で「未入力」「データなし」という状態ですね。
**2つ目は「空文字列」**です。
これは「値は入っているけど、文字数がゼロ」という状態で、Accessでは `””` と表記します。
ちょっと分かりにくいですが、「空っぽの箱がある」みたいなイメージです。
Nullは「箱自体がない」状態なので、似ているようで全然違います。
**3つ目は「スペース」**です。
半角スペースや全角スペースだけが入力されている場合、画面では空欄に見えますが、実際には文字が入っています。
だからNullでも空文字列でもありません。
うっかりスペースキーを押してしまったり、コピペした時に紛れ込んだりすることがよくあります。
さらに、**数値の「0」**も要注意です。
0は「値がない」わけではなく、ちゃんと「ゼロ」という数値が入力されている状態です。
だから、Nullやブランクとはまったく別物として扱われます。
たとえば売上金額のフィールドで、「0円のデータを除きたい」のと「未入力のデータを除きたい」のでは、設定する条件が変わってきます。
Accessで正しく抽出するには、「除外したいのはNullなのか、空文字列なのか、スペースなのか、それとも0なのか」をハッキリさせることが大事です。
Nullを抽出する・除外する正しい書き方
AccessでNullのデータを抽出したい時は、抽出条件に `Is Null` と書きます。
逆にNull以外を抽出したい時は `Is Not Null` を使います。
ここで注意してほしいのが、`= Null` とか `<> Null` みたいな書き方ではうまくいかないということです。
Nullは「値が存在しない状態」なので、普通の比較(=とか<>とか)では判定できないんです。
Accessのクエリデザイン画面で `Null` と入力すると、自動的に `Is Null` に変わることもあります。
たとえば、メールアドレスが未入力(Null)のレコードだけ抽出したい場合は、こう書きます。
“`
Is Null
“`
逆に、メールアドレスが入力されている(Nullじゃない)レコードを抽出したい場合は、こうなります。
“`
Is Not Null
“`
ただし、ここに落とし穴があります。
`Is Not Null` は「Nullじゃないデータ」を抽出する条件なので、空文字列 `””` やスペース `” “` が入っているレコードも含まれてしまいます。
つまり、「空白以外を抽出したい」と思って `Is Not Null` を設定しても、見た目が空白のデータが残ることがあるんです。
この現象は、Access初心者だけじゃなく、仕事で既存のデータベースを引き継いだ人にもよく起こります。
「条件を設定したのに空白が出てくる!」という時は、だいたいこのパターンです。
空文字列やスペースを除外する方法
空文字列を抽出したい場合は、抽出条件に `””` と書きます。
空文字列以外を抽出したい場合は `<>“”` を使います。
たとえば、備考欄に何か入力されているデータだけ抽出したい時は、こう書きます。
“`
<>“”
“`
でも、これだけだとNullのレコードがどうなるか微妙です。
Accessでは、Nullと空文字列は別物として扱われるので、`<>“”` だけではNullをうまく除外できない場合があります。
本当に「空白っぽいものを全部除外したい」なら、Nullと空文字列の両方を意識して条件を組み立てる必要があります。
さらに、スペースだけが入っているデータも空白に見えるので、実務ではTrim関数(前後のスペースを取り除く関数)を使って判定するのがおすすめです。
0以外のデータを抽出する時の注意点
数値のフィールドで0以外のデータを抽出したい時は、基本的に `<>0` と書きます。
たとえば、売上金額が0じゃないレコードだけ表示したい場合は、こんな感じです。
“`
<>0
“`
SQLで書くとこうなります。
“`sql
SELECT *
FROM 売上テーブル
WHERE 売上金額 <> 0;
“`
ここで大事なのが、**Nullをどう扱うか**です。
`<>0` は「0じゃない値」を抽出する条件ですが、Nullは値が存在しないので、0と比較できません。
だから、Nullのレコードは普通、`<>0` の条件だけでは抽出結果に含まれません。
もし「0は除外したいけど、未入力のNullは確認のために表示したい」という場合は、条件に `Or Is Null` を追加します。
“`sql
WHERE 売上金額 <> 0 OR 売上金額 IS NULL;
“`
逆に、「0もNullも除外して、ちゃんと数値が入っているデータだけ抽出したい」場合は、`<>0` と `Is Not Null` を組み合わせます。
“`sql
WHERE 売上金額 <> 0 AND 売上金額 IS NOT NULL;
“`
クエリデザイン画面なら、同じ行に条件を並べるとAND条件(両方を満たす)になります。
実際の仕事では、この「Nullを含めるのか、除外するのか」を曖昧にしたままクエリを作ると、集計結果や件数が合わなくて困ることがあります。
たとえば、請求金額が0のデータは「無料」や「対象外」を意味していて、Nullは「まだ金額を入力していない」という意味かもしれません。
どちらも画面上では問題ありそうに見えますが、業務上の意味は全然違いますよね。
0以外を抽出する時は、単に `<>0` と書くだけじゃなく、Nullをどう扱うかを業務ルールに合わせて決めることが大切です。
空白以外を確実に判定する実践的なテクニック
「空白以外を抽出したいのに空白が出てくる」という時は、だいたいNull・空文字列・スペースのどれかが混ざっています。
特に、ExcelからAccessにインポートしたデータや、複数の人が入力したテーブルでは、同じフィールドにNullと空文字列が混在することがよくあります。
また、コピペや手入力で、半角スペースや全角スペースだけが入っていることもあります。
こういうデータは見た目だけでは分からないので、クエリ側でまとめて判定する工夫が必要です。
テキスト型のフィールドで「Null、空文字列、スペースだけのデータを全部除外して、ちゃんと文字が入っているものだけ抽出したい」という時は、**Nz関数とTrim関数を組み合わせる**方法が便利です。
– **Nz関数**:Nullを別の値に置き換える関数
– **Trim関数**:文字列の前後にあるスペースを取り除く関数
たとえば、名前フィールドに実際に入力があるデータだけ抽出したい場合は、こんな条件式を作ります。
“`
Trim(Nz([名前],””)) <> “”
“`
この条件の意味を順番に説明すると:
1. `Nz([名前],””)` で、Nullを空文字列に置き換える
2. `Trim` で前後のスペースを取り除く
3. その結果が空文字列じゃなければ「入力あり」と判断
これで、Null・空文字列・前後スペースだけのデータをまとめて除外できます。
ただし、Trim関数は文字列の**前後**のスペースを削除するだけで、途中にあるスペースまで消すわけではありません。
名前や住所みたいに途中のスペースが意味を持つフィールドでは、むやみに置換しないよう注意してください。
クエリデザイン画面で設定する場合は、演算フィールドを作る方法が分かりやすいです。
新しい列にこんな式を入力します。
“`
判定用: Trim(Nz([名前],””))
“`
そして、その列の抽出条件にこう書きます。
“`
<>“”
“`
この方法なら、判定結果を目で確認しながら抽出できるので、「なんでこのレコードが残ったんだろう?」という疑問も解決しやすくなります。
特に、既存データの品質チェックや、インポート後のデータ整理では役に立ちます。
抽出結果に疑問がある時は、いきなり更新クエリで修正するんじゃなく、まず選択クエリでNull・空文字列・スペース・0の状態を確認することをおすすめします。
まとめ:データの状態を理解すればトラブルは減らせる
最後に、Accessで空白や0以外の条件を扱う時は、**テーブル設計も見直す**とトラブルを減らせます。
テキスト型のフィールドには「値要求」や「空文字列の許可」といったプロパティがあって、設定によって削除後にNullになるか空文字列になるかが変わる場合があります。
数値型や日付型では空文字列は使えないので、未入力は必ずNullとして扱われます。
この違いを理解しておくと、クエリの条件式を場当たり的に直すんじゃなく、データの意味に合った判定ができるようになります。
Accessで空白や0以外のデータを正しく抽出するには、条件式だけじゃなく、データ型・入力ルール・インポート元の状態まで含めて確認することが実務では大切です。
最初はちょっと面倒に感じるかもしれませんが、慣れてくると「このフィールドはNullが入るはず」「ここは空文字列かも」と予測できるようになって、クエリ作りがグッと楽になりますよ!
広告
