Windows8 & Office2013 Access2013

Print Friendly

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

投稿日: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のフォームでフィルターを実行した後、そのフィルターのデータをそのままレポートへ出力する方法です。 分割フォームの作成 テーブルや ...

続きを見る

お勧め記事と広告

関連記事

条件付き書式で複数条件を結び付ける

Accessのフォームやレポートでは条件付き書式を設定することができます。 この条件付き書式で、複数の条件を満たされているかどうかを判定する ...

セルをダブルクリックして検索

Excelでセルをダブルクリックして、検索と置換ダイアログボックスを呼び出し、そのセル内の文字列を検索するマクロです。 ワークシート名が[名 ...

プレゼンテーションをWordへ送信

PowerPoint2013で作成したプレゼンテーションをWordへ送信して、簡単に配布資料などを作成することができます。 [ファイル]タブ ...

Excelのテキストボックスでのタブ設定

Excelでテキストボックスを挿入した後、そのテキストボックス内の文字列にタブ設定をする方法です。 [挿入]タブの[テキストボックス]の[横 ...

PowerPivot2013のリレーションシップ

Excel2013のPowerPivotで、下の操作でExcelファイルを取込ました。 Excel2013のPowerPivotでExcel ...

-Windows8 & Office2013 Access2013

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

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