こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Access フォーム検索

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

投稿日時 - 2018-07-05 10:52:35

QNo.9515365

困ってます

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

検索フォームのコマンドボタンの[イベント プロシージャ]とした場合
検索フォームのテキストボックス「出力」に結果を表示する例です。
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

投稿日時 - 2018-07-05 13:53:50

お礼

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

投稿日時 - 2018-07-05 14:49:09

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

【訂正】

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

投稿日時 - 2018-07-05 12:58:50

お礼

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

投稿日時 - 2018-07-05 14:47:23

ANo.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()の戻り値は真/偽。で、検索可。

投稿日時 - 2018-07-05 12:53:23

お礼

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

投稿日時 - 2018-07-05 14:47:04