• ベストアンサー

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