• ベストアンサー

アクセスのフィルタ nullについて。

質問です。 アクセスのテーブルの中で、あるフィールド(フィールド名:管理番号)が空白のものだけ抽出したいのです。フィルターで、管理番号箇所に「Is Null」としたのですが、実際空白になっているデータがうまく抽出されません。 で、「Is Not Null」で抽出するとそれらのデータが抽出されます。 そのデータの認識ではnullになってないようです。 (でも実際空白です。) どうやったらnullで抽出されるでしょうか? ちなみにそのフィールドのデータ型はテキスト型です。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

こんにちは。 >""とnullは違うということでしょうか? そうです、違います。 アクセスのヘルプでは、 >空白値のフィールドについて >情報が未確定である場合と情報が存在しない場合には、どちらもフィールドを空白にしますが、 >Access では、2 種類の空白の値を使ってこれらを区別することができます。 >空白値には、Null 値と長さ 0 の文字列があります。 >たとえば、[得意先] テーブルの [ファクシミリ] フィールドについて、得意先のファックス番号が不明の場合、 >または得意先にファックスがあるかどうかが不明の場合は、フィールドを空白にしておきます。 >このためには、値が不明であることを示す Null 値を入力します。 >後で顧客がファックスを持っていないことがわかった場合は、 >値がないことを明示的に示す長さ 0 の文字列を入力します。 となっています。 つまり、そのフィールドに対して最初は、Nullが入っており、 そのフィールドに対して入力がされて、中をクリアした場合は長さ 0の文字列になります。 目で見てわかりやすい例は、チェックボックスで確認できます。 フォームにチェックボックスをおいて表示してみて下さい。 チェックボックスの中がグレイになっていると思いますが、それがNull値です。 そこにチェックをするとレ印になり(値が入っている状態)、はずすと空白(長さが0の状態)になります。 実施は、チェックボックスの場合、Null、True、Falseで、ちょっと違いますが、3種類の値があります。 これと同じでテキストボックスには、Null、値が入っている状態、長さ0の文字列があります。 なお、空白値(Nullと長さ0)を許可/禁止する、"Required/値要求"プロパティ、 空白文字列(長さ0)を許可/禁止する、"AllowZeroLength/空文字列の許可" プロパティがあります。 これを組み合わせて使います。 ちょっとわかりにくかったら、すみません。 では。

ehime0312
質問者

お礼

再度の回答ありがとうございます。 すっごい判りやすかったです!! これが判っただけでも抽出の幅が広がりますし。 確かにチェックボックスを作成した時にあえて、未チェックにした場合と未投入の場合とで0と空白に分かれてました。(←これに対しても不思議に思ってました。)手元にあるアクセスの本は初心者用の為か記載されてなくて・・・・本当にありがとうございますm(_ _)m。

その他の回答 (2)

  • losedog
  • ベストアンサー率66% (22/33)
回答No.2

Accessのヘルプからの引用ですが。 Null 値は、バリアント型 (Variant) に有効なデータが入っていないことを示す値です。 変数が初期化されていないことを示す Empty 値や、Null 文字列と呼ばれる長さが 0 の文字列 ("") とは異なります。 そんなこと言われたって、見た目では区別つきませんよね(笑)

ehime0312
質問者

お礼

いえいえ私が初期的な事が判らないだけですので(笑) ありがとうございます(^^)。

回答No.1

こんにちは。 Is Null Or "" としてみてはどうでしょうか? ちがったらすいません。 では。

ehime0312
質問者

お礼

ありがとうございます。 見事抽出できました。 ちなみにどういう事かわかりますでしょうか? ""とnullは違うということでしょうか? イマイチ良く分からないのですが。 もしお分かりならまたお返事いただければ嬉しいです。

関連するQ&A

  • NULL値を含む場合のフィルタ

    アクセスです。 テーブルに フィールド1 フィールド2 A    B       B  C       C と入ってるとします。 フィールド2についてはNULL値のレコードもあれば、 値が入ってる場合もあります。 このテーブルをフォームにひもづけていて、(帳票フォームにしています) フォームヘッダーにテキストボックス2つとコマンドボタンがあり Private Sub コマンド_Click() Me.Form.Filter = _ "フィールド1 like '*" & Me.テキスト_1.Value & "*'" & " and " _ & "フィールド2 like '*" & Me.テキスト_2.Value & "*'" Me.Form.FilterOn = True End Sub としたときに、レコードのフィールド2に文字が入ってる場合は、抽出できるのですが、 フィールド2がNULLの場合は、1件もヒットしません。 テキスト_1にはAを入れて テキスト_2には何も入れないで検索してみると、1件もヒットしませんが、 テキスト_1にBを入れて検索すると、Bのレコードが抽出されます。 もちろん テキスト_1もテキスト_2もBをいれても、Bのレコードが抽出されます。 VBAコードで & "フィールド2 like '*" & Me.テキスト_2.Value & "*'" としてるので、NULL値でも抽出されると思ったのですがなぜ何も抽出されないのでしょうか? ワイルドカードでnull値も検索されないのでしょうか? テーブルのフィールド2のデータをNull値ではなく、””にしたら、問題なく抽出されましたが データのNull値はNull値のままにして、空白などの文字には置き換えたくないです。 (というか、すべてのNULL値に空白を入れる作業が大変なのでやりたくないです。 実際のフィールド数は50個くらいあります) よろしくお願いします。

  • accessで空白の時の抽出

    access2000を使っています。まだ初心者なので難しい事はできないのですが、クエリを使って絞り込み検索のフォームを作っています。 テーブル内のデータで空白のデータがあります。その際にクエリの抽出条件にlike iif(is null([forms]![formA]![テキスト100]),"*","*"&[forms]![formA]![テキスト100]&"*")としています。フォームのテキストが空白のときは全て抽出するという条件を満たす予定で設定したのですが、テーブル内のデータが空白の物が抽出できません。データが空白がない様にすればいいのでしょうが、クエリの条件で設定できないものでしょうか?データはテキスト型です。

  • アクセス カッコをフィルタしたい

    アクセスのテーブルでデータにカッコがはいってるのですが それをフィルタで抽出しようとするとエラーになります。 例えば、タイトルフィールドに 「映画名(邦画)」が入ってる場合、 右クリック→テキストフィルタを押すと 「ユーザー設定フィルター」が出てきて、 タイトルが次の値で終わる:の所に「)」を入れると、 「正しい値を入力してください」とメッセージが出てしまいます。 (邦画)を入れても同じエラーです。 「指定の値を含む」にして、「邦画」と入れれば問題なく抽出できるのですが、 カッコを抽出したい場合どうすればいいのでしょうか? クエリで WHERE (((T_test. タイトル) Like "*)")); とするしかないのでしょうか? できれば直接テーブルでフィルタがかけられるようにしたいです

  • MCアクセスで フォームフィルタで抽出

    MCアクセスです。 フォーム画面でフォームフィルタで抽出しようとするとき 1.条件を指定したいフィールドをクリックする。 2.「▽」をクリックする 3.一覧から条件とする項目を選択する。 この時、項目がコンボックス(?)のように出るフィールドと、項目が出ないフィールド(IsNull,Is Not Nullと出る)があります。 どのように設定したら、全てのフィールドで項目が出てくるのでしょうか? __

  • 不一致クエリでnullまで抽出されてしまいます

    質問です。 現在、accessにて不一致クエリを使用し、テーブルAをチェックし、 マスタテーブルに無い情報が書かれてしまっているフィールドがある場合 抽出して確認をする、というクエリを作りたいと考えています。 不一致クエリにて自動で入る「is null」を使用すると マスタテーブルに無い事が書いてあるレコードは抽出するのですが (逆になぜis nullで相違するレコードが抽出されるのか理解に苦しんでもいるのですが) is nullですので、nullのレコードも抽出されてしまいます。 抽出条件として、マスタテーブルと相違するもの&nullは抽出しない、としたいのですがお知恵を拝借出来ませんでしょうか。 よろしくお願いいたします。

  • 文字列の入っているString値、何も入力されていないString値、Null値の全てを表示されるには?

    access2003です。 フォーム1とクエリ1とテーブル1があります。 クエリ1の「テーブル1の番号フィールド」の抽出条件に 「Like "*" & [Forms]![フォーム1]![番号テキスト] & "*"」と入力しています。 フォーム1の番号テキストに「1」を入力しコマンドホ゛タンを押すと 「1」を含むレコードを表示され フォーム1の番号テキストに「*」を入力しコマンドホ゛タンを押すと 何かしらの文字列が入力されているレコート゛が表示されます。 しかし テーブル1番号フィールドには、 Null値と何も入力されていないString値(""←が入っている)も含まれています。 (見た目は空白どちらも空白です) (String値がある理由はADOを使って何も入力されてない値もまとめてレコードに追加している為) ここで質問なのですが フォーム1のコマンドホ゛タンを押したときに 文字列の入っているString値、何も入力されていないString値、Null値の全てを表示されるには どうすればいいのでしょうか? よろしくお願い致します。

  • ACCESS2000のテーブルのNULL

    教えてください!! ACCESS2000のテーブルにある、フィールドのデータの中にある”NULL”を数字に置き換える方法を教えてください。置き換えるのは、いくつもNULLがあっても一つでいいのですが・・・。 よろしく、お願いいたします。

  • ACCESS2003 クエリの抽出条件

    宜しくお願いします。 フィールド A A B B 1 セレナ ステップワゴン ・ ・ とあります。 抽出条件にてIS NOT NULLにすると空白以外表示されます。 セレナ以外の場合、IS NOT "セレナ"にするとセレナ以外になります。 クエリを実行する際、空白以外、セレナ以外、Aのみ、と一度で入力し、表示させたいのですが、どのようにすればよいでしょうか。 抽出条件を[抽出条件を入れてください]とし、 実行ボタンを押し、IS NOT NULLやNOT LIKE "セレナ"といれても何も表示されません。

  • NULLを認識させる方法

    Access2000を使用しています。 SQL文について質問です。 AとBの、内容が似たテーブル (フィールド項目は全く同じで入力内容が若干違います) それぞれの'数量'というフィールドを比べ、 内容が一致する件数を出力したいというのが目的です。 方法としてはCOUNTを使用し、 (A.数量)(B.数量)を結合&比較して一致しないレコードが NULL意外のものを件数に数えるようにしたいのです。 しかしIS NULLやIS NOT NULLを使うとTRUEかFALSEが 渡ってしまいます。 そこで質問なのですが、 COUNTを使って、 データが一致しないところがNULLであることを認識させ、 カウントからはずすには、どのようにSQLを作成したら よいでしょうか?

  • Accessのフィルタについて

    Access2002のフィルタについて質問します。 データシートで性別フィールドにはチェックを入れると「男性」チェックを入れないと「女性」というようにしています。 データシートから「フィルタ/並べ替え」で男性だけを抽出しようとしました。「レコード」「フィルタ」「フィルタ/並べ替え」で「抽出条件」に「True」と入れると男性が抽出されました。しかし「抽出条件」に「True」である「1」を入れても抽出できません。「0」を入れると「女性」が抽出できるのですが、なぜか「1」では「男性」が抽出できません。 しかし「-1」だと「男性」が抽出できました。これはなぜでしょうか? 「True」は「1」ではないのでしょうか?教えてください。