• ベストアンサー

Access フォーム検索

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

  • 9don
  • お礼率100% (6/6)

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1621/2461)
回答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

  • Accessフォーム検索

    AccessでA、B、C個別のフォーム検索があり 各々検索結果を別フォームで表示させています。 ここから更に、条件選択で表示させる方法はありますか? 例) A:カテゴリー B:名前 C:素材 をAND、ORでフォーム表示させたいのです。 宜しくお願い致します。

  • access 検索フォームで検索が出来ない(コードについて)

    accessにて、薬の在庫管理DBを構築しています。 「薬剤名」で検索をし、フォーム上に表示させたいと思っていますが、 コード記述をしても検索出来ず、かれこれ2~3週間悩み続けております。 一人で四苦八苦しながら作って居るため、 原因が良く分からず、質問させて頂きます。 よろしくお願い致します。m(__)m 視覚的に説明します。              f_薬剤マスター ~フォームヘッダ~ 非連結のtxt 「薬剤検索」    「検索」ボタン     ※2つがあります ~詳細~ 「薬剤ID」 「薬剤区分ID」「薬剤区分名」 「薬剤名」 「包装内容」 「包装量」 「単位」「適用チェック」 とあります。 フォームヘッダの検索ボタンのイベントプロジーシャに Private Sub コマンド20_Click() Me.Filter = "[薬剤名] Like '*" & Me!薬剤検索 & "*'" Me.FilterOn = True End Sub と記述をしていますが、薬剤名を入れて、コマンドボタンを押しても検索がかけられません。 この「f_薬剤マスター」をメインフォームとして、 サブフォーム 「f_仕入れマスター」と 「f_価格マスター」と 言う順で2つ連結させていますがその関係もあるのでしょうかせいなのでしょうか? 尚、この3つのフォームのリレーションは t_薬剤マスター → t_仕入れマスター → t_価格マスター と、いづれも 1対多 でリレーションを組んでいます。 初心者の為何がおかしいのか良くわかりません。 どなたかご教授の程お願い致します。m(__)m

  • ACCESSでのフォームから固定値での更新に関して

    初歩的な質問で申し訳ありません。 教えて下さい。 社員マスタテーブルと評価テーブルが以下の項目で存在しています。 《社員マスタ》  社員マスタ、氏名 《評価テーブル》  社員マスタ、評価、年月 上記内容をフォームを使って、社員番号、氏名、評価、年月 という項目を 表示させ、社員番号が存在するまで評価を手入力するというような仕掛けを考えています。 表示は参照クエリで社員番号をキーにして両テーブルを結合させ、フォームに出力しています。 上記条件の中で、フォームのヘッダーへ年月を入力する欄を設け、そこに入力されたデータで、 追加されるデータの年月を全て入力された年月にしたいと考えております。 何か良い記述?の方法はありますでしょうか。。。 教えて頂きたいと思います。 よろしくお願いします。

  • Access2007 フォームでのOR検索

    Access歴は2カ月程度です。 クエリから作成したフォームの中でのOR検索を行いたいのですが フィールド名・・・工具名,使用番号 検索に使用する非連結txtbox・・・工具名条件,使用条件 となっており、 Private Sub 検索_Click() If [工具名条件] <> "" Then 検索文字 = 検索文字 & " and 工具名 like '*" & [工具名条件] & "*'" If [使用条件] <> "" Then 検索文字 = 検索文字 & " and 使用番号 like '*" & [使用条件] & "*'" If 検索文字 = "" Then Me.FilterOn = False Else Me.Filter = Mid(検索文字, 6, 2000) Me.FilterOn = True DoCmd.Requery End If End Sub となっており、工具名と使用番号のAND検索は出来ているのですが、使用番号が1~6あり、 OR検索を使用して2つを検索条件にし、それぞれ該当している結果を表示させたいのですが。。。 工具名はカタカナや漢字のみです。 使用番号は「1,2,3」等と入力してあります。 クエリの抽出条件は無記入です。 どうぞ、よろしくお願いします。

  • VBAで検索フォームを作成したい

    ユーザーフォームを使って検索ツールを作成したい。 たとえば、ワークシート内にこのようなデータがあります。  A列                B列 1業務分類        問合せ内容 2                単価訂正できない 3                販売契約が登録できない 4                出荷登録でエラー 5財務         仕訳登録でエラー 6                源泉税額はどこに入力するか 7                仮払金を申請するには 8購買         検収でエラー 9                購買依頼が登録できない これを、ユーザーフォームで、 カテゴリ選択・・・コンボボックスで「営業」「財務」「購買」のいずれかを選択する キーワード検索・・・テキストボックスでキーワードを入力する。テキストボックスは2つ用意し、 ラジオボタンでAND条件かOR条件かを選択させる これで、カテゴリ選択で「営業」を選択した場合は、B2:B4の範囲でキーワード検索し、ヒットするセルをアクティブにする。 ヒットするセルが複数ある場合、Enterキーで次にヒットするセルをアクティブにする。 次にヒットするセルがない場合は「検索文字列がありません」などのメッセージを表示する ヒットするセルがひとつも存在しない場合も「検索文字列が存在しません」を表示する 以上のようなツールを作成したいのですが、どのように組んだらよいでしょうか? ご教示ください。おねがいします。

  • ポップアップフォームからの検索

    こんにちは、お世話になっています。 AC2000/WIN2000です。 質問させて頂きます。 メインフォーム(マスター)があり、 そのフォームのボタンを押すと 検索用のポップアップフォームが開くようになっています。 検索フォームの検索社員番号テキストボックスに 指定の社員番号を入力すると マスターフォームの社員番号が検索出来るように 以下のように書いたんですが 検索することが出来ません。 おかしいとこをご指摘して頂ければ幸いです。 ---------------------------- Public NumA, NumB As Integer NumA = Forms!マスター!IDNum NumB = Me.[検索社員番号] Forms!マスター!社員NO2.SetFocus DoCmd.FindRecord NumB & "*", , , acDown, True, , True If NumA <> Forms!マスター!IDNum Then NumA = Forms!マスター!IDNum Else MsgBox "該当者はいませんでした" End If End Sub

  • ACCESS2003でクエリを使った検索フォームを作っています。

    ACCESS2003でクエリを使った検索フォームを作っています。 クエリは以下の様になっています。 ----------  番号   タイプ   品名  1111   AA     商品1  2222   AA     しょうひん2  3333   BB     商品しょうひん3 ---------- 品名のフィールドの抽出条件に ---------- Like "*" & [Forms]![品名検索フォーム]![品名検索] & "*" ---------- と入れています。 品名検索フォームは帳票タイプで、フォームヘッダーにテキストボックスを設け 「品名検索」と名前をつけています。 テキストボックスに【商品】と入力すれば番号1111と3333が、【しょうひん】と入力すれば 番号2222と3333が抽出されるように設定し、ここはうまく動きました。 ただ、このフォームを開いた際、テキストボックスは空欄になっているため、全レコードが 表示されてしまいます。テキストボックスが空欄の際は、何も表示したくないのですが どこを触ればいいのでしょうか? どうかよろしくお願いいたします。

  • access フォーム間で情報が引き継がれない

    初心者です、よろしくお願いします。 仕様環境 WinXP Access2002 請求管理のシステムを作っています。 テーブルには 顧客マスタ(主キーは顧客番号でテキスト型 例:0001等) 請求マスタ(主キーは請求番号でテキスト型 例:A0001等) 明細マスタ(主キーは明細番号でオートナンバー ダミーみたいな感じで使っています。) そしてリレーションシップで顧客マスタ(1)→(多)請求マスタ(1)→(多)明細マスタになっています。 顧客マスタを元にしたフォーム(顧客入力フォーム)に顧客情報を入れて、 「請求書作成ボタン」を作り、そのボタンを押すと別のフォーム(請求書作成フォーム)に 飛ぶようにしているのですが、その際に顧客入力フォームに入力した情報を 引っ張っていくようにしたいのですが、うまくいきません。 ちなみに顧客マスタと請求マスタのリレーションは”顧客番号”でつなげています。 請求書作成フォームは請求書作成クエリから成り、 その中で顧客番号(テーブル:顧客マスタ)の抽出条件に[Forms]![顧客入力フォーム]![顧客番号]と 入れて”顧客番号つながり”で飛ぶようにしているのですが、 請求書作成フォームは開くのですけど、項目はすべて空白です。 またいろいろレコードを追加している内に、請求番号が既にあるものに対しては顧客情報も引き継がれることが判明しました。 構文が間違っているのでしょうか? 混乱しています、お助けください。

  • 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を使っています。よろしくお願いします。

  • Accessの検索フォーム(CLng)で。

    検索フォームの項目は以下の通りです。 ○ AND  ○ OR 名前  [    ] 項目  [    ]▼  [    ]▼  [    ]▼ もとになってるテーブルは ・名前 ・項目1 ・項目2 ・項目3 ・項目4 ・項目5 というようなっています。 (項目1-5は数値データなのであいまい検索はしたくありません。) 検索ボタンのコードは Select Case Me!検索方法.Value Case 1 'or tempOper = " AND " strCount = 5 Case 2 'and tempOper = " OR " strCount = 4 End Select '名前 If Me!SyainName.Value <> "" Then condName = "(T_マスタ.氏名 like '*" & Me!SyainName.Value & "*')" WhereCond = WhereCond & tempOper & condName End If If Me!項目1.Value <> "" Then condKoumoku1 = "(T_マスタ.項目1 = " & CLng(Me!項目1.Value) & ")" condKoumoku2 = "(T_マスタ.項目2 = " & CLng(Me!項目1.Value) & ")" condKoumoku3 = "(T_マスタ.項目3 = " & CLng(Me!項目1.Value) & ")" tempCond = tempCond & " OR (" & condKoumoku1 & " OR " & condKoumoku2 & " OR " & condKoumoku3 & ")" End If If tempCond <> "" Then tempCond = Mid(tempCond, 5) WhereCond = WhereCond & tempOper & "(" & tempCond & ")" End If WhereCond = Mid(WhereCond, strCount + 1) DoCmd.OpenForm "F_検索結果_一覧", acNormal, , WhereCond これを実行すると クエリ式 '((OR OR))' の構文エラー:演算子がありません。 と出ます。 どこを訂正すべきでしょうか? Access2000です。

専門家に質問してみよう