• ベストアンサー

ACCESSの複数フィールドの検索

私がしたい事はおそらくかなり初歩的なことと類推されますので、がっくりされないようにお願いします。 「報告書」のテーブルがあります。 その報告書のフィールドは 報告日 報告者氏名 A店の感想 B店の感想 C店の感想 となっていると考えてください。 このテーブルをもとに、表形式で一覧の出るフォームを作っており、この一覧のフォームフッターにテキストボックスがあります。 このテキストボックスに例えば「D商品」と入力してエンターを押すと「A店の感想 B店の感想 C店の感想」中に「D商品」が出てくるレコードすべてが抽出されるというようにしたいと思っています。 1つのフィールドでのやり方がとあるサイトにあったので、私は Private Sub テキスト28_AfterUpdate() Me.Filter = "A店の感想 like'*" & Me!テキスト28 & "*'" Me.FilterOn = True End Sub という式を作成しました。 これだと「A店の感想」フィールドにキーワードがあればヒットしますが、B店、C店にキーワードがあってもA店にキーワードが無ければ反応はありません。 これを3つのフィールドで出来るようにいくつか試してみましたがどれも失敗でした。 どのようにすれば、複数フィールドのキーワード検索・抽出が出来るのでしょうか。 私の取ったやり方に近いもの、別の全然違うやり方、ともに勉強になるので色々教えてください。 それと、これでも結構検索したのですが、検索ワードが不適切なのか、ありそうなニーズにも関わらずぴったりくるものを見つけられませんでした。 もしよければACCESSをわかりやすく学習出来るサイトを教えてください。有名そうなところをいくつかは知っております。

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

  • ベストアンサー
  • koganeton
  • ベストアンサー率29% (30/101)
回答No.4

まだ出てない方法ということで このテーブルを元に クエリーをつくってそこに ABC感想:A店の感想 & B店の感想 & C店の感想という フィールドを作って これを検索するようにすれば できます。

baritsu
質問者

お礼

ありがとうございます! 取り急ぎ教えていただいた方法で解決できました。 何事も工夫すれば、手持ちの技術だけでも改善は図れるということを実感しました。何で思いつかなかったんだろ・・・。 ※急に忙しくなった事もあり、#2さん、#3さんのやり方はまだ試せていません。 試す時間が出来たらやってみて、その結果報告と共にお礼を書かせていただいて締め切らせていただきます。しばらく#2さん、#3さんには失礼をいたしますがお許し下さい。

その他の回答 (3)

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.3

フォームのフィルタはあまり使わないのですがORでA店・B店・C店を繋げてみてください。 ="A店の感想 like'*" & Me!テキスト28 & "*'" OR "B店の感想 like'*" & Me!テキスト28 & "*'" のように これで行けませんでしょうか。 クエリでやるとこんな感じです。 SELECT テーブル名.A店の感想, テーブル名.B店の感想, テーブル名.C店の感想 FROM テーブル名 WHERE (((テーブル名.A店の感想) Like "*" & [Forms]![フォーム名]![テキスト28] & "*")) OR (((テーブル名.B店の感想) Like "*" & [Forms]![フォーム名]![テキスト28] & "*")) OR (((テーブル名.C店の感想) Like "*" & [Forms]![フォーム名]![テキスト28] & "*"));

baritsu
質問者

お礼

ありがとうございます。 こちらは何とかできましたが、もっとキチンとAccessそのものを学習する必要がありそうです。そうすればもっと仕事の効率化に活かせそうです。 学習の必要性を強く感じさせていただき、ありがとうございました。 お礼遅くなり申し訳ございません。

noname#95859
noname#95859
回答No.2

1つのキーワードで複数のフィールドを調べて or で表示する。 下記を参考にしていただければ幸いです。 Private Sub コマンド89_Click() If Me.テキスト48 <> "" Then ' ItemContent、ItemNameはフィールド名です。 selectCondition = "ItemContent like '*" & Trim(Me!テキスト48) & "*' or ItemName like '*" & Trim(Me!テキスト48) & "*'" End If Me.Filter = selectCondition Me.FilterOn = True End Sub 具体的には、テキスト48に「pass」を入れた時の、selectConditionの中身は ItemContent like '*pass*' or Itemname like '*pass*' です。

baritsu
質問者

お礼

ありがとうございます。 やってみましたが、もう少しAccessそのものをキチンと学習する必要がありそうです。わけが判らない状態になりました。 学習の必要性を強く感じさせていただき、ありがとうございました。 お礼遅くなり申し訳ございません。

回答No.1

フィルタの条件に Or は使用できませんか? > 別の全然違うやり方 ADO を使用しテーブルを検索する方法があります。検索できたレコードを直接フォームに表示するのも良いですが、一度ワークテーブルに書き込みし、そこからフォームに表示します。冗長化した方法ですので、カレントデータベースの場合はあまりオススメできません。 > もしよければACCESSをわかりやすく学習出来るサイトを教えてください。有名そうなところをいくつかは知っております。 コードを記述できる方ですので、その有名そうなサイトのVBAの掲示板を読むだけでも参考になることが多いと思います。

baritsu
質問者

お礼

>フィルタの条件にorを使用 #3の方の仰る形ではダメでした。 別のやり方は後でやってみようと思います。 ADOって何?っていうところから始めないとダメなレベルなので調べるところから始めます。 回答ありがとうございます。

関連するQ&A

  • 【Access】複数フィールドを対象とする検索

    Access上で「検索ボタン」をクリックすると、 「データ」フォームのフィールド1、フィールド2、フィールド3のいずれかに「検索条件1」の語を含み、かつ、フィールド4、フィールド5、フィールド6のいずれかに「検索条件2」の語を含むレコードを抽出できるようにしたいと思います。 検索条件はテキストボックスに入力するようにしており、テキストボックス名は「検索条件1」、「検索条件2」となっています。 以下のコードでやってみたのですが、「実行時エラー13、型が一致しません」というエラーが出てうまく抽出できません。 Private Sub 検索ボタン_Click() Dim filter1 As String filter1 = "フィールド1 like '*" & Me!検索条件1 & "*' or フィールド2 like '*" & Me!検索条件1 & "*' orフィールド3 like '*" & Me!検索条件1 & "*'" And " フィールド4 like '*" & Me!検索条件2 & "*' or フィールド5 like '*" & Me!検索条件2 & "*' orフィールド6 like '*" & Me!検索条件2 & "*'" DoCmd.OpenForm "データ", acNormal Forms!データ!.filter = filter1 Forms!データ!.FilterOn = True End Sub 「検索条件1,2」のテキストボックスがあるフォーム上の「検索ボタン」をクリックすると、 「データ」フォームが開き、検索をかけるという流れをイメージして作成 しています。 どなたか正しい記述を教えていただけませんでしょうか。 よろしくお願いいたします。

  • アクセス2003で検索条件と検索キーワード検索

    アクセス2003で検索機能を作りたいです。 まずプルダウンで検索条件を選び、さらに検索キーワードを手入力し、その条件に見合ったものを抽出するという形。 検索条件とは、フィールド名。検索キーワードは、フィールドの中にある言葉。 質問 (1)マクロのフィルタの実行のwhere条件式において 〔フィールド名〕like~と入れているのですが、この頭のフィールド名をいじくれば良いのか? (2)ある識者に伺ったところ、次のVBA(イベントビルダ)を教わりましたが、オブジェクトに値を代入できませんと出てきました。 Me.filter=""&Me.![テキスト名1]&"like'"&"*"&Me![テキスト名2]&"*"&"'" Me.filterOn=True このテキスト名1をコンボに変更しました(非連結)。検索条件となるあるテーブルを値ソースとしています。何か自分が間違っていますか? できれば、クエリを使うことなく行きたい。 アクセスのつくりとしては、 基幹となるテーブルAとそれに1対多にあるテーブルBそしてテーブルBと1対1にあるテーブルCの3つをクエリを用いて1つのフォームに表しています。 その中のいくつかのフィールドを選択条件とし(プルダウンで選ぶ)、キーワード入力する。 小職、アクセスを始めたばかりです。どうかよろしくお願いいたします

  • Accessの検索フォーム

    またまたAccessについての質問です。 検索フォームというのを作りました。 テーブルのデータから条件に合うものだけを抽出したいのです。 たとえば1つ目の検索フォーム[A]のテキストボックスに「AAA」を入力します。 そのあとBには「BBB」と入力します。 同じくCには「CCC」と入力します。 そして絞込みボタンを押したらAAAでBBBでCCCのものが抽出されます。 これはうまくいきました。 とりあえず、複数条件なので、わけもわからず「&」で結んでしまいました・・・。 ↓は絞込みボタンのクリック時です。↓ 困ったのは、すべて検索条件を指定しない場合です。 たとえば「AAA」で「CCC」のものを抽出したいとき、[A]のテキストボックスに「AAA」と入れ [C]のテキストボックスに「CCC」と入れます。 そして絞込みボタンをクリック。 するとBが未記入だからか、抽出されたのは真っ白でした・・・。 Option Compare Database Private Sub コマンド50_Click() Me.Filter = "契約='" & Me!テキスト51 & "'and A='" & Me!テキスト57 & "'" Me.FilterOn = True End Sub 組み合わせが自由になる検索フォームにするにはどうすればよいのでしょうか? 誰か助けてくださ~い!

  • 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で複数条件抽出

    Accessで複数条件抽出をする方法を教えてください。 フォーム内に[A]、[B]のテキストボックスがあり、検索用のテキストボックス[C]を設けており、[C]入力した文字が[A]または[B]に入力されているデータと一致するものを抽出したいのですが、以下のようなコードではうまくいきません。 Me.Filter="A='" & Me![C] & "'" Or "B='" & Me![C] & "'" どのようにすればうまく抽出できるか教えてください。

  • 複数のテーブルの検索について

    お世話になっております。 題名にありますように、複数のテーブルに登録のあるデータを、テキストフォームやチェックボックス、プルダウンなどのフォームで入力(選択)されたものを(PHPにて)検索したいと考えておりますが、googleなどで調べていても、キーワードが適切でないためか、得たい情報を得られずにおります。 以下のようなテーブル構成で、上記質問のような検索をする場合、(googleなどで検索するには)どのようなキーワードが適切でしょうか?ソースを教えていただくのが簡単ですが、理解を深めたいと考えての質問です。お忙しい中恐縮ですが、アドバイスのほど宜しくお願いいたします。 table_a id name address category table_b no id title subject 上記テーブルA、Bに設定されたフィールドを、各フォームににて入力(選択)されたフォームで一括で検索するソースを学びたいのです。 ※table_a と table_b にある id で紐付けています。

  • アクセスの複数フィールドからの抽出について教えてください。

    「テーブル1」があり、「テーブル1」の中にフィールドA、フィールドB、フィールドC、フィールドDがあります。  その4つのフィールドの中のどれにも”あ”という言葉が含まれていないレコードを探しだしたいのですが、クリエでOR検索してもうまくいきません。  フィールドAに”あ”は無くても、フィールドBかフィールドCに”あ”といいう文字が含まれているものが出てきてしまいます。どうしてでしょう・・・  ちなみにSQL文は SELECT * FROM TABLE1 WHERE ((Not (TABLE1.フィールドA)="あ")) OR ((Not (TABLE1.フィールドB)="あ")) OR ((Not (TABLE1.フィールドC)="あ")) OR ((Not (TABLE1.フィールドD)="あ"));  となっています。明らかに初歩的な問題だと思われますが、初心者のため分からず困っております。  アドバイス、よろしくお願いします。

  • Access 検索フォーム

    いつもお世話になってます。 Accessの検索フォームについて教えて下さい。 業務マスターと仕事DBという2つのデーターベースがあります。 業務マスターは共有のサーバーの中にあり、得意先テーブルをリンクして、それをもとに得意先フォームを作りました。 非連結のテキストボックス(txt検索)と非連結のリストボックス(一覧)がり、リストボックス(一覧)のクエリ得意先の抽出に使うフィールドの条件に、Like"*"&[Forms]![得意先フォーム]![txt検索]&"*" を入れました。 txt検索に文字を入れ、一覧リストボックスで絞込をし、選ぶとフォームに表示されるという流れにしたのですが・・・。 Private Sub txt検索_AfterUpdate() Me![一覧].Requery End Sub Private Sub 一覧_AfterUpdate() Dim rs As Object Set rs = Me.Recordset.Clone rs.FindFirst "[得意先ID] = " & Str(Nz(Me![一覧], 0)) If Not rs.EOF Then Me.Bookmark = rs.Bookmark End Sub [Forms]![得意先フォーム]![txt検索]というパラメータがでて(今まで出たことがない) 文字を入力しても実行できませんでした。参照元が分からないのかなと思いますが、どうしたらうまくいくのか分かりません。どなたかお知恵をかしていただけないでしょうか。Accessは2003を使っています。よろしくお願いします。

  • VBAで日付型とテキストでフィルタをかけるには?

    テーブルのデータは フィールド1 2012/1/1 2012/1/2 2012/1/3 2012/1/4 2012/1/5 2012/1/6 2012/1/7 2012/1/8 2012/1/9 2012/1/10 フィールド2 A A A A A B B B B B です。 このクエリをもとに票フォームを作成して、 ・txt_始まりテキスト ・txt_終わりテキスト ・txt_フィールド2テキスト を作りました。 あとコマンドボタン(cmd_抽出)も作りました。 このコマンドボタンを押して 日付とテキストを抽出したいのですがVBAでのやり方を教えてください。 クエリなら ------------------------------------------------------------ SELECT テーブル1.フィールド1, テーブル1.フィールド2 FROM テーブル1 WHERE (((テーブル1.フィールド1) Between #1/4/2012# And #1/6/2012#) AND ((テーブル1.フィールド2)="A")); でできました。 ------------------------------------------------------------ しかしVBAで ------------------------------------------------------------ Private Sub cmd_抽出_Click() Me.Form.Filter = "フィールド1 Between #" & Me.txt_始まりテキスト.Value & "# And #" & Me.txt_終わりテキスト.Value & "#" & _ "' And フィールド2 like '*" & Me.txt_フィールド2テキスト.Value & "*" & "'" Me.Form.FilterOn = True End Sub ------------------------------------------------------------ をすると、 ------------------------------ 実行時エラー3075 構文エラー:演算子がありません。 ------------------------------ になります。 どうすればいいか教えてください。 結果は、 ------------------------------ フィールド1 フィールド2 2012/01/04 A 2012/01/05 A ------------------------------ です。 ご回答よろしくお願いします。

  • アクセス2007にて複数フィールドに対してのあいまい検索のやり方がわかりません

    アクセス2007を使用しています。 初心者ですので説明がわかりずらいかもしれませんが、都度補足していきますのでよろしくお願いいたします。 現在、顧客を管理するためのデータベースを作成しています。 新規顧客のデータを入力する→【F新規入力】フォーム 既存の顧客のデータを名前、もしくは住所から検索する→【F検索】フォーム を作成しました。 【F新規入力】フォームから入力されたデータは【T顧客データ】に格納されます。 【F新規入力】には『名前1』『名前2』『住所1』『住所2』『住所3』『住所4』というフィールドがあります。 『名前1』は必須入力で『名前2』は空欄でもOKとします。 住所に関しては都道府県名~地番までを『住所1』~『住所4』に分けて入力します。 【F検索】にはテキストボックス『名前検索』と『住所検索』があります。検索ボタンとサブフォームもあります。 検索キーワードを入力して検索ボタンを押すとサブフォーム内に検索キーワードを含むデータが表示されるようにしたいのです。 間違っているのかも知れませんが、【Q検索クエリ】を作成し、抽出条件を【F検索】の『名前検索』『住所検索』に入力されたキーワードであいまい検索、【Q検索クエリ】を元にサブフォームを作成すればできると思っているのですが、検索条件をあてはめるフィールドが多くて、どのように条件を設定すればいいのかわかりません。 たとえば 『名前検索』キーワード……山 『住所検索』キーワード……中町 と入力し、検索ボタンをおすと『名前1』『名前2』のいずれかに"山"を含み、かつ『住所1』~『住所4』のいずれかに"中町"を含むデータが表示される たとえば 『名前検索』キーワード……木 『住所検索』キーワード……空欄 と入力し、検索ボタンをおすと『名前1』『名前2』のいずれかに"木"を含むデータが表示される ようにするのが目標なのですが、どなたかお知恵を貸してください。。。

専門家に質問してみよう