• ベストアンサー

Access フォーム検索

Access フォーム検索で添付のように 3つのキーワードをマスターの3つの項目から 検索することはVBで記述可能でしょうか? ※キーワドの位置(番号)とマスターの カテゴリー番号に関連はありません。 OR条件ですと、3つのキーワードのいづれかが カテゴリー1~3に存在する。 AND条件ですと3つのキーワードが カテゴリー1~3に順不同で存在する。 宜しくお願いします。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1725/2595)
回答No.3

検索フォームのコマンドボタンの[イベント プロシージャ]とした場合 検索フォームのテキストボックス「出力」に結果を表示する例です。 ANDの場合です。 ただ、クエリを利用して表示させた方が簡単だと思います。 たとえばマスタA クエリを作成して表示(実行)する場合 DoCmd.OpenQuery ("マスタA クエリ") だけで済みます。 Private Sub コマンドボタン_Click() Dim dbsCurrent As Database Dim SQLdata As Recordset Dim SQLstr As String Set dbsCurrent = CurrentDb SQLstr = "SELECT [マスタA].[CD], [マスタA].[名前], [マスタA].[カテゴリー1], [マスタA].[カテゴリー2], [マスタA].[カテゴリー3]" + _ "FROM [マスタA] " + _ "WHERE ((([マスタA].[カテゴリー1])='" + Me![キーワード1] + "') AND " + _ "(([マスタA].[カテゴリー2])='" + Me![キーワード2] + "') AND " + _ "(([マスタA].[カテゴリー3])='" + Me![キーワード3] + "'));" Set SQLdata = dbsCurrent.OpenRecordset(SQLstr) Do Until SQLdata.EOF Me!出力 = Me!出力 & _ SQLdata![CD] & _ SQLdata![名前] & _ SQLdata![カテゴリー1] & _ SQLdata![カテゴリー2] & _ SQLdata![カテゴリー3] & vbCrLf SQLdata.MoveNext Loop SQLdata.Close dbsCurrent.Close End Sub

9don
質問者

お礼

ご丁寧にご指導ありがとうございます。 トライしてみます。

その他の回答 (2)

回答No.2

【訂正】 CompareWords() には、列データを参照して比較するように変数でなくてダイレクトに列名で記述するように!

9don
質問者

お礼

ご丁寧にご指導ありがとうございます。 トライしてみます。

回答No.1

Q、VBで記述可能? A、可能。 【アイデア】 WHERE 節で CompareWords() を利用する。 strCats=[カテゴリー1] & "|" & [カテゴリー2] & "|" & [カテゴリー2] strKeys=[キーワード1] & "|" & [キーワード2] & "|" & [キーワード2] SELECT * FROM [table_name]  WHERE CompareWords(strCats,strKeys, 0) 0=AND 1=Or CompareWords()の戻り値は真/偽。で、検索可。

9don
質問者

お礼

ご丁寧にご指導ありがとうございます。 トライしてみます。

関連するQ&A