Windows8 & Office2013 Access2013

Print Friendly, PDF & Email

フィルターの空白を含む複数選択で抽出数が違う

投稿日:2017年1月7日 更新日:

Access2007からの新機能だと思うですが、テーブルやデータシートビューでフィルターが使用できます。
Excelのフィルターと同じように操作できて重宝しているのですが、落とし穴があります。
苦々しく思うのですが、まずその現象を説明します。
Access2007もAccess2010も同じ現象です。ここでは、Access2013で解説します。

発端は、分割フォームのデータシートビューで、あるデータを抽出しようとしたのですが、[空白]のみを抽出した時の件数と、[空白]とその他の項目を1つ選択して抽出した時の件数が違う。[空白]のみを抽出すると10件なのに、他のデータと組み合わせて抽出すると8件になる。抽出されない空白があるのです。
これじゃ、データベースとして使えないですよね。空白が存在する他のフィールドも同じ現象でした。
ただ、この現象を再現しようとテーブルを作成し直してもなかなか同じ現象にならず、四苦八苦してしまいました。そして、やっと分かったことです。

下のようなテーブルがあります。[備考]フィールドには空白があります。フィルターは[すべて選択]されています。
テーブル

[備考]フィールドのデータ型は[短いテキスト]です。フィールドプロパティの[値要求]は[いいえ]、[空文字列の許可]は[はい]です。既定です。
フィールドプロパティ

[空白]のみを抽出するため、[空白]のチェックボックスのみをオンにして[OK]ボタンをクリックします。
空白選択

抽出件数は5個ですね。OKです。
空白抽出

では、ここで、[空白]と[チェック済]のレコードを抽出するため、[空白]と[チェック済]のチェックボックスをオンにして[OK]ボタンをクリックします。
空白と他1つの選択

結果は、下のように3件となります。おかしいですよね?5件+1件で6件抽出されなければならないのに。
抽出結果

[空白]、[チェック要]、[チェック済]を抽出した状態です。[空白]はやはり2個しか抽出されません。
空白と他2つの抽出結果

ですが、たちが悪いことに選択数を[空白]を含めて4個にすると、この現象は出ません。
[空白]、[チェック要]、[チェック済]、[不具合あり]を選択すると、[空白]は5個抽出されます。
空白と他3つの抽出結果

抽出件数が異なる原因

分かったことです。
空白には[Null値]と[長さ0の文字列]があります。
Microsoftの解説ページをリンクしておきます。
Access の Null 値と、長さ 0 の文字列の違いについて

上記のテーブルでは№3と№4と№5が[長さ0の文字列]、№9と№10が[Null値]なのです。
[空白]のみを抽出する場合は、[Null値]と[長さ0の文字列]が抽出され、他の項目と一緒に抽出する場合は、[長さ0の文字列]が抽出されないことがあるのです。

テーブルのフィールドプロパティで[値要求][いいえ]、[空文字列の許可][はい]としている場合、[Null値]と[長さ0の文字列]の両方が入力されます。長さ0の文字列を意図的に入力したつもりはないのですが、何かの拍子に[長さ0の文字列]になったのだと思います。

解決策

解決策です。
空白をすべてNull値にすれば、この現象は出ませんので、更新クエリを作成して[長さ0の文字列]を[Null]にします。
更新クエリ

また、フィールドプロパティで[空文字列の許可]を[いいえ]にしておくと、[長さ0の文字列]は入力されなくなります。
空文字列の許可の変更

Access2003の時の[テキスト型]の既定は、[値要求]は[いいえ]、[空文字列の許可]は[いいえ]だったような気がします。mdbファイルをaccdbファイルに変換するときは、データ型のフィールドプロパティまで、しっかり確認しないといけませんね。

分割フォームのデータシートビューにあるプルダウンで抽出したデータをそのままレポートへ出力することができます。
フォームのフィルター実行後のデータをレポートへ

フォームのフィルター実行後のデータをレポートへ

Accessのフォームでフィルターを実行した後、そのフィルターのデータをそのままレポートへ出力する方法です。 分割フォームの作成 テーブルや ...

続きを見る

参考Officeのバージョンによって操作が異なる場合があります。以下の記事で、お使いのOfficeのバージョンを確認する方法を解説しています。

Office(Word、Excel、PowerPointなど)のバージョンを確認する方法

Microsoft Officeも時を得て、大きく様変わりしてきました。トラブルを解決しようとするとき、あるいは、何かの操作を探すときなど、 ...

続きを見る

あなたへのおすすめ

関連記事

新規文書が互換モードになる

Word2013で新規文書を開くと、いつも[互換モード]になるようになりました。 (環境はWindows7、Office2010とOffic ...

コンボボックスに重複しないデータを表示する

Accessでコンボボックスを使用して抽出する方法はいくつかありますが、テーブル内の重複しないデータをコンボボックスに表示する方法を紹介しま ...

目的別スライドショーは印刷も可能

PowerPointでは、用途に合わせてスライドを調整し登録することができる[目的別スライドショー]という機能があります。この[目的別スライ ...

埋め込みマクロのコード変換

Access2007以降(拡張子accdb)では、[コマンドボタンウィザード]や[マクロビルダー]を使ってボタンを作成すると、[埋め込みマク ...

ユーザーアカウントを取得して更新者を記録する

Accessでフォームを起動した時に自動でPCのユーザーアカウントを取得して、更新者を記録する方法です。 帳票フォームの[編集]ボタンをクリ ...

-Windows8 & Office2013 Access2013

Copyright © 2001-2017 初心者のためのOffice講座 All Rights Reserved.

Copyright© 初心者のためのOffice講座 , 2017 AllRights Reserved Powered by AFFINGER4.