質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

2回答

2582閲覧

Access 1つのテキストボックスにスペース区切りで複数ワード検索

kurotyan1

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2022/03/08 06:45

前提・実現したいこと

1つのテキストボックスにスペースで区切った複数の検索ワードを入れて抽出する方法を教えてください

発生している問題・エラーメッセージ

コンボボックスで顧客名(顧客ID)から顧客を絞り込み、その結果からさらにコンボボックスで支店名を絞り込み、その結果からさらに商品名を検索するテキストボックスを作成しました 顧客名から支店名を絞り込んで商品名を1つのワードで検索、または顧客&支店名を絞り込まずに全てのデータからスペース区切りで複数ワードで検索することはできたのですが、顧客名から支店名を絞り込みさらにその結果からスペース区切りで検索ができません

該当のソースコード

If Me.支店検索 <> “” Then
抽出 = “支店名 Like ‘” & Me.支店検索 & “’”
End If

If Me.商品検索 <> “” Then
抽出 = 抽出 & “ AND 商品名 Like ‘” & Me.商品名検索 & “’”
End If

これで顧客名から支店名を絞り込んだ結果から商品名を1つのワードなら検索できます

商品検索の抽出部分を
抽出 = “Like ” & Replace(Me.商品名検索, “ “, “ AND Like ”) &. “
抽出 = BuildCriteria(商品名”, 10, 抽出)
に変更すると顧IDと支店名を絞り込まず全てのデータから検索ワードで絞り込まれた商品が抽出されます

試したこと

抽出 = 抽出 & “ AND Like ” & Replace(Me.商品名検索, “ “, “ AND Like ”) & “

このように変更するとエラーも出ないし抽出もできません

補足情報(FW/ツールのバージョンなど)

Access初心者なので何とかここまで作成したのですが、色々調べても抽出結果からさらに複数ワードで抽出する方法がわかりません

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

AND条件ではなくOR条件ですよね。ANDだと1件も抽出されないです。
また、ANDとORが混在するときは、OR条件部分は()で囲む必要があります。
あと、あいまい検索でなくていいなら、Likeは不要です。

vba

1抽出 = 抽出 & " AND (" & BuildCriteria("商品名”, dbText, Replace(Me.商品名検索, “ “, “ OR ”)) & ")"

コメントによると、たぶん、あいまい検索のAND条件のようですね。(説明が「あいまい」なので判断が難しいですが)

商品名検索に「AA AC」と入力したら、「AA-AB-AC」 がヒット、「AA-AB-CC」はヒットしない。

vba

1抽出 = 抽出 & " And " & BuildCriteria("商品名”, dbText,"*" & Replace(Me.商品名検索, “ “, “* And *”) & "*")

上記だと、商品名検索が「AA AC」の場合、下記になる
AND 商品名 Like "*AA*" And 商品名 Like "*AC*"

あいまい検索のときは「*」で囲む必要があります。

上記の式の解説
商品名検索に「AA AC」と入力されているとき、
"*" & Replace(Me.商品名検索, “ “, “* And *”) & "*"*AA* AND *AC*と変換される。
BuildCriteriaメソッドはクエリの抽出条件に設定した条件式を解析してSQLのWhere句を生成する機能と同等のものになります。
BuildCriteria("商品名”, dbText, "*AA* AND *AC*")は、商品名 Like "*AA*" And 商品名 Like "*AC*"という条件式を出力します。

投稿2022/03/08 10:14

編集2022/03/09 12:15
hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kurotyan1

2022/03/08 10:36

回答ありがとうございます ORではなくANDだけで抽出したいです
hatena19

2022/03/08 10:50

商品名が「AAA」かつ「BBB」ということはありえないですよね。(かつ=AND) 商品名が「AAA」または「BBB」なら、 「AAA」と「BBB」が抽出されます。(または=OR) どのような結果が希望なのか、実際のデータを例示して説明してもらえませんか。
kurotyan1

2022/03/08 13:27

商品名が「AA-BB-CC」「AA-AB-AC」「AC-BB-BC」のようなものから、まずあいまい検索で「AA」を絞り込んで、その結果からあいまい検索で「AC」や「BC」を絞り込みたいのです 抽出 = “Like ” & Replace(Me.商品名検索, “ “, “ AND Like ”) &. “” 抽出 = BuildCriteria(商品名”, 10, 抽出) これならIDと支店名を絞り込まない全データからANDで抽出できたのですが… 何か考え方が間違っているのでしょうか?
kurotyan1

2022/03/08 13:57

少し説明が間違っていました あいまい検索で「AA」と「AC」や「BB」と「BC」のように2つの条件を(できれば3つの条件を)スペース区切りで抽出できるようにしたいです
hatena19

2022/03/09 01:40

提示のコードはコンパイルエラーでそもそも実行できません。 やりたいことは、あいまい検索のAND条件ということですかね。 回答に追記しておきましたので参照ください。
kurotyan1

2022/03/09 05:50

あいまい検索のANDで 「商品名検索に「AA AC」と入力したら、「AA-AB-AC」 がヒット、「AA-AB-CC」はヒットしない。」 このような検索で間違いありません あいまい検索の場合は「*」で囲むという事はわかったのですが、教えていただいたコードにどの様に入れていくのかがわかりません 抽出= 抽出 & “ AND 商品名 Like ‘*” & Me.商品名検索 & “*’ (“ & Buildcriteria(“商品名“,dbText, Replace(Me.商品名検索, “ “, “* and like *”)) & “)” あいまいの部分を「*」で囲ってという事は、こういう事なのでしょうか このコードを基に色々変更してみたのですが、うまくいきません 初歩的な質問で申し訳ありません
kurotyan1

2022/03/10 01:41

式の説明でよくわかりました! この式を入れて思っていた通りの抽出が出来ました! ExelとWordしか触ったことがない65歳のおばあちゃんが初めてAccessに挑戦したので、今回はやりたい事だけネットで検索して読み漁って作成したため基本的な事がわかっていません。 これが完成したら基本からじっくり勉強したいと思います。こんな初心者に丁寧にご回答いただき、本当にありがとうございました。
guest

0

VBA

1抽出 = 抽出 & " AND (商品名 Like '" & Join(Split(Me.商品名検索), "' OR 商品名 Like '") & "')"

です。

投稿2022/03/08 07:18

iruyas

総合スコア1067

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kurotyan1

2022/03/08 10:06

回答ありがとうございます この通りに入力してみましたが、やはりエラーも出ず抽出もされません この商品名検索ボックスの変更時に大文字、小文字、全角、半角を区別しないように “SELECT [商品名] FROM [T取引明細2] WHERE [商品名] COLLATE JAPANESE_CI_AS” が指定してあります これは関係あるのでしょうか 勉強不足で申し訳ありません
kurotyan1

2022/03/08 10:18

JOINとSPLITも自分なりに調べて(勉強して)みます
iruyas

2022/03/09 01:23

OR ではなく AND ということなら OR → AND に変更すればできるはずですが... Like 検索ですから「AA-AB-AC」を検索するためには、商品名検索テキストボックスに AA* *AC のように入力する必要があります。
kurotyan1

2022/03/09 23:34

やはりORでもANDでもエラーも出ず抽出もされません 「AA* *ACのように入力」をもう少し詳しく教えていただけないでしょうか
iruyas

2022/03/10 00:32

質問の最初から「Like」を記述しているので、まさかご存じないとは思いませんでした。 Me.商品名検索 に入力する文字列に * を意識的に入力させるのが無理なら、hatena19 さんの プログラム中に * を書く方式の方がいいでしょう。
kurotyan1

2022/03/10 00:59

勉強不足で申し訳ありません。 また的外れの事かもしれませんが、使う人が商品名のみ複数ワード入れ、あとは全てキーボードかマウスで選択すれば抽出できるようにしたくて、使う人も大文字小文字、全角半角関係なくただ商品名だけ入れればいいようにできたらと思っています。
kurotyan1

2022/03/10 01:42

何度も見直して式を入力し直したら、演算子がありませんと表示されます。 他の方の回答で解決できました。 こんな初心者に丁寧にご回答いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問