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でもついて回りますので、
少し知っているといいかもしれませんね。