7/28/2018

Access。クエリで空白スペースと何もないNullは違うので、未入力の抽出条件はこうなります。【NUll】

Access。クエリで空白スペースと何もないNullは違うので、未入力の抽出条件はこうなります。

<Access:Nz関数+Trim関数>

次のテーブルをご覧ください。

店舗IDの2と3の電話番号フィールドにはデータが入力されていません。

このようにデータが入力されていないレコードを抽出したいとします。

このようなケースは、ExcelからAccessにテーブルをインポートしてきた後に、
空白データだけを抽出して、入力作業を行いたい場合など、
空白のデータを抽出するケースに遭遇することになりますが、この空白。

そう簡単に空白を抽出して…とはいかないのです。

【Is Nullではダメ】

空白データを抽出するには、
Is Nullを抽出条件としてクエリを作ってみればいいわけですので、
次のようにクエリを作っていきます。

電話番号フィールドが空白かどうか?ということなので、
抽出条件に、「Is Null」と入力して実行してみましょう。

このように、店舗IDが2のレコードしか抽出されませんでした。

なぜ、このような結果になってしまったのかというと、
店舗IDの3のレコードの電話番号には、何もデータが入っていない、
いわゆる、未入力なのではなく、空白のスペースが”入力”されていたために、
Is Nullという条件では抽出することができなかった訳です。

では、どのようにしたらいいのでしょうか?

【Nz関数とTrim関数で未入力は抽出する】

未入力のNullとスペースという文字が入力されているのが、
原因なので、考え方としては、
どちらかに統一してあげるようにすればいいわけです。

そこで、Nullの時に別の内容で表示することができる、
Nz関数を使って、Nullをスペースに変換させて、
そのスペース=空白をTrim関数で取り除くようにすれば、
問題は解決しますので、クエリを次のように修正します。

電話番号: Trim(Nz([T空白処理].[電話番号]," "))

Trim+Nz関数のネストですね。

Nz([T空白処理].[電話番号]," "
で、Nullを半角スペースで表示する。

まぁ置換するわけですね。

そうすれば、Nullはなくなりますので、
Trim関数でスペースを取り除く作業をするわけですね。

そして、忘れてはいけないのは、
抽出条件に「””」というダブルコーテーション×2を入力しておきます。

ExcelのIF関数でエラーを表示しないようにするときに、
「””」=空白という意味で使っていますが、

細かい説明をすると、Trim関数でスペースを取り除くと書きましたが、
『0バイトの文字列』に置換したというのが、正しいようで、
抽出条件に「””」を入れるということは、
0バイトの文字列を抽出するという意味になります。

この0バイトの文字列というのは、
文字列だけど文字を含まない
というデータというとわかりやすくなるかもしれませんね。

だから、Excelのエラーを表示させないように、
IF関数で、「””」=空白と使っていますが、
「文字列だけど文字を含まない」文字列を表示しているわけなので、
ExcelでCOUNTA関数を使うと、見た目が空白でも数えてしまうわけですね。

では、クエリを実行してみましょう。

このように、抽出することができました。

Null(ヌル)値と空白(スペース)の違いは、
AccessでもExcelでもついて回りますので、
少し知っているといいかもしれませんね。