Access2007 Like と Notlike

このQ&Aのポイント
  • Access2007のフォームにテキストボックスを配置し、任意の文字列で検索できるようにしたいが、検索条件に「この文字列を含まないもの」という条件を追加することができない。
  • 検索クエリのフィールド抽出条件に「Like '*' & form!フォーム名!テキストボックス1 & '*' And Not like '*' & form!フォーム名!テキストボックス2 & '*'」という組み合わせをしたいが、うまく動作しない。
  • フォームのテキストボックスに何も記述されていない場合は、全てのデータを表示する仕様にしたい。
回答を見る
  • ベストアンサー

Access2007 Like と Notlike

フォームに数個テキストボックスがあり任意の文字列で検索できるようにしていますが、 ”この文字列を含まないもの” という検索もできると検索精度が上がります。 クエリの1つのフィールドの抽出条件に  Like "*" & form!フォーム名!テキストボックス1 & "*" And Not like "*" & form!フォーム名!テキストボックス2 & "*" ということがしたいのですがうまくいきません・・・ (Like と Not Like が混在は無理 というのも理解できるのですが…) form!フォーム名!テキストボックス1 → この部分に直接文字列を記述すると機能するのですが、フォームに入力された文字列を検索 という記述にすると機能しません… フォームのテキストボックスに何も記述されていない時は全部表示するようにしたいです。 こんなことは可能でしょうか? よろしくお願い致します。

  • MySQL
  • 回答数1
  • ありがとう数8

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

たとえば、 ID    名前 1    田中AAA 2    佐藤BBB 3    徳川CCC 4    田中BBB というテーブルがあって、これを基に クエリを作って、名前の抽出条件に、 Like "*" & [Forms]![フォーム名]![テキスト1] & "*" And Not Like "*" & [Forms]![フォーム名]![テキスト2] & "*" として、フォームのテキスト1に「田中」、テキスト2に「AAA」 といれて、「田中BBB」を表示する、ということでしょうか。 質問の方法で、表示されますが、一度上記のように オブジェクトを[]で囲んでみたらどうでしょうか。 >フォームのテキストボックスに何も記述されていない時は全部表示する この場合は、 >Like "*" & [Forms]![フォーム名]![テキスト1] & "*" And Not Like "*" & [Forms]![フォーム名]![テキスト2] & "*" を書いた下の欄の、「または」というところに、 [Forms]![フォーム名]![テキスト1] Is Null AND [Forms]![フォーム名]![テキスト2] Is Null とします。Accessでは一旦クエリを閉じて、もう一度クエリを デザインビューで表示すると、表示内容が変わっているかもしれませんが、 これはAccessの独自の表現に変更されただけです。 なお、これでも、たとえば、「テキスト1」だけに「田中」 と入れて「テキスト2」には何もいれなければ、何も 表示されない、ということにはなります。 以上です。わからないところがあれば補足してください。

YYJJPPP
質問者

お礼

お礼が遅くなりすみません。 like と not like は混在可能で、テキストボックスの中に何か入力されていないと何も表示しない、クエリしないということでしたので、not like のテキストボックスに常に半角スペース2つが入力されている状態を作るマクロを組みました。半角スペース以外の文字列が入力されていればその文字列をクエリ条件にします。力技かもしれませんが、一応解決です。 ありがとうございました。

YYJJPPP
質問者

補足

返信遅くなり申し訳ありません。 ご回答ありがとうございます。 [ ]は自動で入力されますので、抽出条件には上記が記述されています。 (横着ですみません…) >なお、これでも、たとえば、「テキスト1」だけに「田中」 >と入れて「テキスト2」には何もいれなければ、何も >表示されない、ということにはなります。 つまり、Like と Not Like を混在させても動作するが、Like のみのときと同じ動作はできないということですよね… 先ずは、Like と Not Like が混在可能かが知りたかったので簡単に質問させていただきましたが、もう少し詳細書きますと… ・テーブルは Excel をリンクしています。 ・いくつかのフィールドにコンボボックスとテキストボックスを参照し、  いくつかはコンボボックスの値のみ参照しています。 ・メインのクエリはテーブル作成クエリによって毎回作成されるメインのテーブルを参照しています。 (スタートのフォームで【商品A】のボタンを押したらマクロが実行されます) Not Like でも Like と同じように機能させるような別の方法も考えてみます。

関連するQ&A

  • AccessのLikeの使用について

    こんにちは。 Accessでクエリなどに条件を設定する時、 Like [Forms]![フォームの名前]![テキストボックスの名前] と設定するのと、 [Forms]![フォームの名前]![テキストボックスの名前] とでは意味が違ってくるのでしょうか。 Likeの使い方がいまいち解っていません。 わかりにくい文章で申し訳ありませんが教えてください。 よろしくお願いします。

  • Accessクエリの抽出条件にフォームから挿入する方法

    Accessフォームのテキストボックスに入力されたデータを、クエリの抽出条件に挿入したいのですが、その際部分一致で検索したいため、抽出条件にLike "*[Forms]![フォーム名]![テキストボックス名]*"と記述したのですがうまく行きません。 どのように記述すれば部分一致で検索できるのかお教えください。

  • Accessのクエリ

    初めまして。Accessのクエリについての質問です。 Access2003を使っています。 検索フォームを作り、その検索フォームにテキストボックスを2つ作り、そのテキストボックスに検索したい言葉を入力し、コマンドボタンで作った検索ボタンを押すとマクロでフィルタの実行がされデータを抽出できるというものを作りました。フィルタには選択クエリを使用しています。抽出したい2つのフィールドの抽出条件にあいまい条件のLike "*" & [Forms]![フォーム名]![テキストボックス名] & "*"を入れています。 今はテキストボックスが2つですが、もっと増やしていろんな条件で検索出来るようにしたいので、3つ目のテキストボックスを作り、抽出条件も同じように入れました。ですが、そうすると今までちゃんとできていた最初の2つのテキストボックスによる抽出が違った結果となりでてきました。このとき、新しく作った3つ目のテキストボックスは空欄なので最初と同じ結果が出ると思ったのですが、これは抽出条件が3つはできないということでしょうか?どなたか教えてください。

  • アクセスである文字を含む検索

    ACCESS2000を使っています。 あるデータテーブル「発注書テーブル」があって、ここでは「(1)ID」「(2)顧客名(法人)」「(3)発注商品」「(4)納品済チェック」の4つフィールドがあるとします。 作業はフォームで行います。フォーム名は「発注書フォーム」。 「(2)顧客名」から検索をかけたくて、検索コマンドボタンをつくり、「検索フォーム」を発注書フォームとまったく同じ形態でつくり、そこにとべるようにしました。 「検索フォーム」には「検索」というテキストボックスを作ります。 「検索クエリ」というクエリを作り、発注書テーブルを素とし、すべてをデザインビューで表示するようにしました。 そして、「(2)顧客名」の抽出条件に[Forms]![検索フォーム]![検索]を入力します。 すると、「検索フォーム」の「検索」をコンボボックスにして、顧客名をすべて表示させ選択した場合は、「検索フォーム」では、選択した顧客の情報が表示されるようになりました。 が、しかし、「検索」をコンボボックスではなく、テキストボックスで、しかも顧客名の一部だけを入力したら、その文字を含むすべてのレコードを表示してほしいのです。 そこで、「検索クエリ」の「(2)顧客名」抽出条件にlike"*[Forms]![検索フォーム]![検索]*"と入力してみました。 そして「検索フォーム」の「検索」テキストボックス(非連結)に顧客名の一部を入力したところ、ぜんぜん絞りこみ抽出してくれません。 もちろん、クエリ上でも絞り込んでいない模様です。 どうしたら文字の一部からその文字を含む顧客名のレコードを全て抽出し、表示させることができるでしょうか? 細かくてすみませんが、かなり困ってます。 どうかわかる方、教えてください。 まったくちがう方法(別の手法)でもかまいません。 この説明でわからない部分がありましたら補足しますのできいてください。 よろしくお願いします。

  • Accessでデータベースを作っています。

    Accessでデータベースを作っています。 先日、こちらで質問をさせていただいて、クエリで複数のフィールドを対象にデータを検索する ことはクリアできました。 ありがとうございました。 ご指導に基づき、4つのフィールド(仮にA,B,C,D)について、クエリの抽出条件に  Like "*" & [Aを入力] & "*"  Like "*" & [Bを入力] & "*" ・・・ とそれぞれ設定してパラメータ入力を求め、4つの条件すべて、または一部のみ設定して検索し、 正しい検索結果が得られました。 今度は、検索用のフォームを作成し、フォームで入力した条件をクエリに送って、同じ結果を 得たいと思うのですが、以下の方法では正しい検索結果が出てきません。 ・フォームに検索用のボックスをA~Dまで4つ作成(ひとつはコンボボックス、あとはテキスト) ・クエリの抽出条件に、それぞれ以下を入力     Like "*" & [Forms]![Q_form(作成したフォームの名前)]!                       [A(それぞれの検索ボックスの名前)] & "*" ・フォームに「クエリの実行」のコマンドボタンを配置 パラメータで入力する代わりにフォームを使いたい、というものなのですが(パラメータ入力 よりも、コンボボックスを使って値を選ぶ方が検索する人には使いやすいかと思って)、どうしたら うまいこといきますでしょうか。。 教えてください。

  • Accessの使い方で質問です

    画面上から指定された条件をどのようにクエリに活かせばいいのかがよくわかりません。どなたかアドバイスをどうかお願いします。 ・対象テーブルの列は以下のような構成です。  会社コード 商品コード 商品番号 購入者名 ・やりたいこと (1)フォーム上のテキストボックス(に限りませんが)に上記の列名のいずれかを指定させます。 (2)そのテキストボックスに入ってきた列のデータ値に合わせた条件をユーザーに入力してもらいます。 (3)その結果を同じフォームの下半分にレコードデータのように表示させます。  ユーザーから見た操作イメージは「どの列に対して((1))条件を指定して((2))レコード検索する((3))」といった感じです。 (2)はクエリ上でその列に対して「like[入力値を入れてください]」と指定すればできると思うのですが、(1)の条件をどのように画面上で指定してもらい、それを(2)のクエリにとりこめばいいのかがわかりません。(3)はサブフォームで(2)のクエリを元に作成すればいいのかも・・・と思うのですが、(1)(2)が出来ないので先に進めず困っています。 どなたかどうかアドバイスをお願いします。質問の内容が足りなかったらすぐ補足します。

  • フォームのテキストボックスを抽出条件とするクエリー

    Access2003を使って、「フォームのテキストボックスを抽出条件とするクエリー」 を作成していて困っています。 まず Like [Forms]![顧客氏名検索]![テキスト2] とすると、完全一致したものだけが抽出できています。そこで 【値の一部が一致】 Like "文字列*"   ※文字列にある文字列を直接入力するとちゃんと抽出できる。 これを参考に Like "[Forms]![顧客氏名検索]![テキスト2]*" とすると、値の一部が一致するものが抽出されません。(何を入力しても該当0件) 抽出条件が正しく設定されてないように思います。 フォームのテキストボックスの値を利用する場合、""や*の使い方がおかしいのでしょうか?

  • ACCESSでの検索

    あいまい検索をしたいです。 【現状】 フォームデザインでテキストボックスを作り、検索ボタンを作成 ↓ 【したいこと】 マクロデザインで、「テキストボックスに文字列を入力すると、文字列を含むデータを抽出」 というまくろを組みたい。 [コード]=[Forms]![total]![コード入力]という、完全一致のものはここで教えていただいて作成できたのですが、もうひとつ、あいまい検索もしたいです。 あいまい検索は、「商品名」です。 宜しくお願いします。

  • Access2003 式ビルダでのLikeについて教えてください

    Acccess初挑戦の状態で困っております。 例えばデータベース内の名前で「山」の文字が含まれる名前を抽出させたい場合、「クエリの抽出条件でLike "*山*"」とすることで抽出できるのはわかるのですが、フォームでマクロの式ビルダを用いて同様の抽出を行いたいのです。 「顧客データ」のテーブルにある「お客様名」のフィールドから、「検索フォーム」の「名前検索」に入力されたキーワードを含むものを抽出させるために、以下の用に式ビルダで作成したのですが、 [顧客データ]![お客様名]=[Forms]![検索フォーム]![名前検索] 完全に一致する場合しか抽出してくれません。 データベース内に「山田 太郎」の名前があったとして検索フォームで「山田 太郎」と入力すると抽出されます。これを「山」と入力しただけで「山田 太郎」が抽出されるようにしたいのです。 Likeの演算子を用いてアスタリスクを使用すれば、できるのかなとは思うのですが、式ビルダへの記述方法がわかりません。 アドバイス頂ければ助かります。

  • Access2003 検索用フォームでの検索がうまくいかない

    Access2003 検索用フォームでの検索がうまくいかない とある、テーブルを参照するフォームを作成。 そしてテキストbokを設けて、各項目毎にキーワードを指定してデータを抽出できるようにしたいのですが、 どうもうまくいきません。 検索は出来ているのですが、全部ひっかからないのです。 例えば ID という項目を検索するbox に"1"を入力して ID=1の全データを抽出しようとすると、一部検索にかかってこないものがある という具合です。 テーブルに入力されている数字や文字が本当に一致しているかどうかも調べましたが確かに一致しています。 実際、テーブルを開いて ctr+f で検索すると全てひっかかります。 何が原因なのでしょうか??? 私の作った手順は以下のとおりです。 テーブル作成(エクセルからインポート) ※空白の欄もあります フォーム新規作成でフォーム作成 フォーム上にテキストbox作成 クエリ作成 (Like "*" & [Forms]![フォーム名]![テキストbox名] & "*" ) マクロ作成⇒フィルタ実行/上の手順で作ったクエリを登録 マクロをフォーム上へドロップ およそこのような手順です。