Access2007フォームでのOR検索方法を解説

このQ&Aのポイント
  • Access2007のフォームでOR検索を行う方法について解説します。工具名と使用番号の2つの条件をOR検索に設定し、該当する結果を表示させる方法を紹介します。
  • Access2007のフォームでOR検索を行う方法について解説します。使用する非連結txtboxの工具名条件と使用条件の両方を入力し、OR検索を行うことができます。工具名と使用番号の2つの条件のどちらかに該当するデータを表示させることができます。
  • Access2007のフォームでOR検索を行う方法について解説します。工具名と使用番号の2つの条件を組み合わせたOR検索を行うために、工具名条件と使用条件の入力によって絞り込みを行います。該当するデータを表示させるためには、フォーム上で検索ボタンをクリックする必要があります。
回答を見る
  • ベストアンサー

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」等と入力してあります。 クエリの抽出条件は無記入です。 どうぞ、よろしくお願いします。

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

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.2

#1です > 使用条件として1~6の数字の他に、すべてのパターンで使う条件としてALLがありました。 > 使用条件のデータ型はテキスト型です。 使用条件には 1 ~ 6 の数字と、ALL の文字が混在しているという事でしょうか。 また、使用番号を指定するのに、 使用条件1 / 使用条件2 という感じにテキストボックスを増やして、この所が OR 工具名条件 と 使用条件 は、あくまで AND で良いでしょうか。 あくまで、以下例ですが、使用条件1 ~ 使用条件4 を画面上に作っていたとします。 で、どこかに ALL の入力があれば抽出条件を設定しない・・・・感じです Private Sub 検索_Click()   Dim sWhere As String   Dim sW As String   Dim i As Long   sWhere = ""   If (Not IsNull(Me.工具名条件)) Then     sWhere = sWhere & " AND 工具名 Like '*" & Me.工具名条件 & "*'"   End If   sW = ""   For i = 1 To 4 ' 使用条件1 ~ 4 ★     If (Not IsNull(Me("使用条件" & i))) Then       If (Me("使用条件" & i) = "ALL") Then         sW = ""         Exit For       Else         sW = sW & " OR 使用番号 Like '*" & Me("使用条件" & i) & "*'"       End If     End If   Next   If (Len(sW) > 0) Then     sWhere = sWhere & " AND (" & Mid(sW, 5) & ")"   End If   If (Len(sWhere) = 0) Then     Me.FilterOn = False     Me.Filter = ""   Else     Me.Filter = Mid(sWhere, 6)     Me.FilterOn = True   End If End Sub なお、聞き漏れていたのですが、使用番号 は数値型でしたでしょうか。 (#1では、使用番号 で書いたつもりが、使用条件になってました) 使用番号が数値型であれば、部分的に以下に変更して大丈夫かと・・・・ > 使用番号は「1,2,3」等と入力してあります。 からするとテキスト型ですかね・・・・以下は不要かも   sW = ""   For i = 1 To 4 ' 使用条件1 ~ 4 ★     If (Not IsNull(Me("使用条件" & i))) Then       If (Me("使用条件" & i) = "ALL") Then         sW = ""         Exit For       Else         sW = sW & "," & Me("使用条件" & i)       End If     End If   Next   If (Len(sW) > 0) Then     sWhere = sWhere & " AND 使用番号 IN (" & Mid(sW, 2) & ")"   End If ※ ここまでの記述では、使用条件1 ~ 4 への入力値のチェックは行っていないので 各テキストボックスでの入力規則とか、更新前処理でチェックしてください。 ※ 使用条件で用意したテキストボックスの個数が2つなら、 使用条件1 / 使用条件2 名にして、上記 ★ 部分の 4 を 2 に変更すれば・・・・ ※※ 上記、未検証ですので動かなかったらごめんなさい。 また、考え違いをしているところがあるかも・・・・

coohle
質問者

お礼

>※※ 上記、未検証ですので動かなかったらごめんなさい。 >また、考え違いをしているところがあるかも・・・・ VBを入力してみたところ、しっかりと動きました。 >使用条件には 1 ~ 6 の数字・・・ >また、使用番号を指定するのに、 >使用条件1 / 使用条件2 という感じに・・・ >工具名条件 と 使用条件 は、あくまで AND >で良いでしょうか。 ばっちりです。 >> 使用番号は「1,2,3」等と入力してあります。 >からするとテキスト型ですかね・・・・以下は不要かも テキスト型で合っています。 とても勉強になります。(不要だなんて!) 30246kikuさんの細かい説明はとてもわかりやすくて勉強になります。 今回教えて頂いたVBを今後に生かせるよう頑張りたいと思います。 本当にありがとうございました。

その他の回答 (1)

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1

チャンと動いているのかわかりませんが、 テキストボックスで入力がない状態の基本は Null だったと思います。 Null と <> "" しているので、Else 側にまわっているのかもしれません。(?) 使用条件 部分に関して考えてみると、 (クエリ内での 使用条件 は、数値型だとして) > If [使用条件] <> "" Then 検索文字 = 検索文字 & " and 使用番号 like '*" & [使用条件] & "*'" 上記部分を If (Not IsNull(Me.使用条件)) Then   検索文字 = 検索文字 & " and 使用番号 IN (★★)"   検索文字 = Replace(検索文字,"★★",StrConv(Me.使用条件, vbNarrow)) End If で、どうでしょう・・・・ ※ StrConv(Me.使用条件, vbNarrow) 部分は、念のため全てを半角に置換えてます。 ※※ 上記で半角に置換えても、数字じゃなかったらエラーになると思います。    また、不要な , が前後についていたら・・・・とか(?) ただ、 > となっており、工具名と使用番号のAND検索は出来ているのですが、使用番号が1~6あり、 > OR検索を使用して2つを検索条件にし、それぞれ該当している結果を表示させたいのですが。。。 の解釈ができてません。 単に 2つの条件の OR であれば、 それぞれの文字列先頭にある " and ・・・・" 部分を " or ・・・・" に変更し、 Me.Filter = Mid(検索文字, 5) とすれば良さそうです。 ※ Me.Filter = Mid(検索文字, 6, 2000) の 2000 が意味あるものか判断できませんでした。 単に 6文字目以降であれば Mid(検索文字, 6) で良いと思います。 ※ 後は好き嫌いになるかと思いますが、自分が使う変数ぐらい初期化を明示されてはどうでしょう、 検索文字 = "" ' ★ If [工具名条件] <> "" Then 検索文字 = 検索文字 & " and 工具名 like '*" & [工具名条件] & "*'" If [使用条件] <> "" Then 検索文字 = 検索文字 & " and 使用番号 like '*" & [使用条件] & "*'" でないと > If 検索文字 = "" Then これが、どういう状態なのか分からなくなることが、私にはあります。 また、どこで宣言されているか・・・・読み取れませんでした。 追記) > Me.Filter = Mid(検索文字, 6, 2000) > Me.FilterOn = True > > DoCmd.Requery 再クエリのタイミングは、Me.Filter もしくは Me.FilterOn = True で発生したと思います。 なので、改めて DoCmd.Requery する必要はないと思います。 ※ 解釈に間違いあれば、ごめんなさい。

coohle
質問者

お礼

ご回答ありがとうございます。

coohle
質問者

補足

説明不足で申し訳ないです。 >使用条件 部分に関して考えてみると、 (クエリ内での 使用条件 は、数値型だとして) 使用条件として1~6の数字の他に、すべてのパターンで使う条件としてALLがありました。 使用条件のデータ型はテキスト型です。 >ただ、 >> となっており・・・ >> OR検索を使用して・・・ > >の解釈ができてません。 こちらも説明不足で申し訳ないです。 使用番号の検索に使用条件1,使用条件2とtxtboxを作り、使用条件のOR検索を行いたいと思っていました。 >※ 後は好き嫌いになるかと思いますが、自分が使う変数ぐらい初期化を明示されてはどうでしょう >再クエリのタイミングは、Me.Filter もしくは Me.FilterOn = True で発生したと思います。 >なので、改めて DoCmd.Requery する必要はないと思います。 とても勉強になります。VBはいまだよくわからなく、 前任の方のものをわかる範囲で調べて行っていました。

関連するQ&A

  • accessの検索フォームについて(複数条件)

    access初心者です。 本などを参考に検索フォームを作成しました。 1つの条件で検索することは出来たのですが、複数の条件を入力するとうまく検索出来ません。 全ての条件を満たすデータの抽出を行いたいと思います。 「あ」「い」「う」というテキストボックスを用意しています。 Private Sub コマンド14_Click() If Not IsNull(Me.txt_あ) Then ' Me.Filter = "あ LIKE '*" & Me!txt_あ & "*'" End If If Not IsNull(Me.txt_い) Then ' Me.Filter = "い LIKE '*" & Me!txt_い & "*'" End If If Not IsNull(Me.txt_う) Then ' Me.Filter = "う LIKE '*" & Me!txt_う & "*'" End If Me.FilterOn = True End Sub よろしくお願いします。

  • アクセスのフォームで数値型の複数検索のについて

    アクセスのフォームで検索ボタンを設置して複数検索をしています。 下記の状態でうまくいってたのですが、依頼でまた一つ検索項目が追加になりました。 追加になった項目は数値型で”を抜いたりしたのですがうまく検索できません。 どうすればうまくいくか教えて下さい。 今のコードは以下の通りです。 Private Sub 検索ボタン_Click() Dim L1 As String If Nz(Me.品名検索, "") <> "" Then L1 = L1 & " AND 品名 Like '*" & Me.品名検索 & "*'" End If If Nz(Me.採取日検索, "") <> "" Then L1 = L1 & " AND 採取日 = #" & Me.採取日検索 & "#" If Nz(Me.数値検索, "") <> "" Then L1 = L1 & " AND 数値 = " & Me.数値検索 End If End If If L1 <> "" Then L1 = Mid(L1, 6) Me.Filter = L1 Me.FilterOn = True Else Me.Filter = L1 Me.FilterOn = False End If End Sub 数値の部分が数値型の新たな検索です。 宜しくお願い致します。

  • アクセスの複数検索で日付の絞込みの仕方

    アクセスでいま3種類の検索をかけて絞込みをしています。 テキスト型と数値型と日付で検索をかけてるのですが 日付の部分を一致だけではなくいつからいつまでという風にも絞り込みたいといわれたのですが いまいちやり方がわかりません。。。 クエリでしたら簡単なのですがすでにフォームを作成して運用していっていますので 下記にプラスして出来るようにご教授お願い致します。 今現在のコードです。 Private Sub 検索ボタン_Click() Dim L1 As String If Nz(Me.品名検索, "") <> "" Then L1 = L1 & " AND 品名 Like '*" & Me.品名検索 & "*'" End If If Nz(Me.採取日検索, "") <> "" Then L1 = L1 & " AND 採取日 = #" & Me.採取日検索 & "#" End If If Nz(Me.数値検索, "") <> "" Then L1 = L1 & " AND 数値 = " & Me.数値検索 End If If L1 <> "" Then L1 = Mid(L1, 6) Me.Filter = L1 Me.FilterOn = True Else Me.Filter = L1 Me.FilterOn = False End If End Sub 採取日を範囲指定で検索したいです。 範囲指定だけではなくその日だけ検索というのも可能ならばお願いします。 Between andでするというのだけは分かるのですが。。。

  • ACCESS VBA で複数項目検索にテキストボックスとコンボボックス

    ACCESS VBA で複数項目検索にテキストボックスとコンボボックスを使用したい txtPC番号というテキストボックス、 com所属部門というコンボボックス、 txt使用者というテキストボックスの どれかひとつの条件が入力されたときに 該当するフォームのレコードを抽出できるようにしたいのですが、 コンボボックスで選択した場合のみうまく抽出できません。 コードのどの部分に誤りがあるのでしょうか? ご指摘願えませんでしょうか? よろしくお願いいたします。 Private Sub cmd01_Click() Me.FilterOn = False If Me!txtPC番号 <> "" Then Me.Filter = "[PC番号]like '*" & Me!txtPC番号 & "*'" ElseIf Me!com所属部門 <> "" Then DoCmd.Requery "com所属部門" ElseIf Me!txt使用者 <> "" Then Me.Filter = "[使用者]like '*" & Me!txt使用者 & "*'" End If Me.FilterOn = True End Sub

  • Accessフォームでの複数条件検索

    検索用テキストが4つとコンボボックスが1つあり、検索ボタンというコマンドボタンを押すと 該当するレコードを表示させるフォームを作りました。 以下がそのVBAです。 Private sub 検索ボタン_click() Dim strfilter As String, strexp As String, aryope As Variant If Not IsNull (me.一) Then strfilter = "And 出版社 Like '*" & Me.一 & "*'" End If If Not IsNull (me.コンボ62) Then strfilter = "And 種類 Like '*" & Me.コンボ62 & "*'" End If If Not IsNull (me.三) Then strfilter = "And 番号 Like '*" & Me.三 & "*'" End If If Not IsNull (me.四) Then strfilter = "And 発刊日 = # " & Format (me.四. "yyyy-mm-dd") & "#" End If If Not IsNull (me.一) Then strfilter = strfilter & " AND " & BuildCritera ( "タイトル", dbText, "*" Replace ( me.五, "", "*AND*") & "*") End If 改正したいことは   1. 検索用テキストボックスに入力された値全てを満たすレコードを表示したい(現在は例えば     出版社、タイトル、番号の3つを入力するとそれぞれの項目にヒットする物がすべて検出さ     れる)   2. テキストボックス[三]の番号は完全一致で抽出したい(26を抽出したいのに126や2673     等も抽出されてしまう)   3. テキストボックス[四]の発刊日は西暦表示から和暦で入力して検索したい     (テキストボックス[四]をコンボボックスに変え、西暦・和暦両方表示にし、[四A]を追加して     月日という名前にしてこれら年月日をくっつけて完全一致で検索する方法を考えましたが     記述がわかりません)   5.タイトルがWeb検索の様に複数曖昧検索ができない     中途半端な検索で抽出してる状態です。     どなたか手直しいただけますでしょうか? 

  • アクセスのフォームで

    アクセスのフォームで、品番一覧というテーブルを基にした、F品番一覧というフォームがあります。 ヘッダー部に検索するコンボボックスがあり、品番一覧テーブルの品番を参照しています。 検索ボタンを押すと、コンボボックスの内容に当てはまるものが、フォームの詳細部に一覧として表示させる様にしたのですが、品番に"50#1"や"50#2"という#を使い、1と2を分けている物があるのですが、コンボボックスで、この#が付いた物で検索すると検索結果がなにも表示されません。#が付いていない物はちゃんと一覧が表示されます。 #が付いている場合でもちゃんと表示するにはどの様にしたら良いですか?テーブル側の#を取り除く事はできません。 検索ボタンのコードは Private Sub 検索_Click() Dim strFilter As String, strExp As String, aryOpe As Variant If Not IsNull(Me.txt氏名) Then strFilter = strFilter & " AND 品番 Like *" & Me.品番一覧 & "*" End If Me.Filter = Mid(strFilter, 5) If strFilter = "" Then Me.FilterOn = False Else Me.FilterOn = True End If となっています。 うまく説明できなくてすいませんが、誰か教えて頂けませんか? よろしくお願いします。 End Sub

  • 1つのテキストボックスで全フィールドを検索するには

    1つのテキストボックスで全フィールドを検索するには Access2002使用です。 現在フォームにて、それぞれのフィールド毎に検索用のテキストボックスを用意してる為、 下記のようになっています。 これを、1つのテキストボックスで全てのフィールドを検索できるようにするには、 どこを訂正したらよろしいでしょうか? 宜しくお願い致します。 Option Compare Database Function exeFilter() Dim strFilter As String If Not IsNull(姓検索) Then strFilter = " AND 姓 Like '*" & Me.姓検索 & "*'" End If If Not IsNull(名検索) Then strFilter = strFilter & " AND 名 Like '*" & Me.名検索 & "*'" End If If Not IsNull(姓ふりがな検索) Then strFilter = strFilter & " AND ふりがな(姓) Like '*" & Me.姓ふりがな検索 & "*'" End If If Not IsNull(名ふりがな検索) Then strFilter = strFilter & " AND ふりがな(名) Like '*" & Me.名ふりがな検索 & "*'" End If If Not IsNull(住所1検索) Then strFilter = strFilter & " AND 住所1 Like '*" & Me.住所1検索 & "*'" End If If Not IsNull(住所2検索) Then strFilter = strFilter & " AND 住所2 Like '*" & Me.住所2検索 & "*'" End If If Not IsNull(住所1ふりがな検索) Then strFilter = strFilter & " AND 住所1ふりがな Like '*" & Me.住所1ふりがな検索 & "*'" End If If Not IsNull(住所2ふりがな検索) Then strFilter = strFilter & " AND 住所2ふりがな Like '*" & Me.住所2ふりがな検索 & "*'" End If Me.Filter = Mid(strFilter, 6) Me.FilterOn = True End Function Private Sub Form_AfterUpdate() End Sub

  • access 表形式のフォームの複数条件検索

    access 表形式のフォームの複数条件検索の方法を教えてください。 現在は一つのComboボックスでの検索はできていますが、 これを2つ、3つにしたいのです。 検索は、学年、組、名前です。 現在は下記マクロで1つの(学年)はできていますが、それ以外の2つ を組み合すことができません。 下記は、学年を入力するComboボックスのcombo1conditionで学年を 選択し、ボタンのbtn1Searchで検索するといったマクロです。 どなたか教えてください。よろしくお願いいたします。 Private Sub btn1Search_Click() If Me.combo1condition <> "" Then Me.combo1condition.SetFocus Me.Filter = "学年 Like ""*" & Me.combo1condition.Text & "*""" Me.FilterOn = True Else Me.Filter = "" Me.FilterOn = False End If End Sub

  • ACCESS VBA にて複数項目のあいまい検索をしようとしています。

    ACCESS VBA にて複数項目のあいまい検索をしようとしています。 txt部所、txt内容、txt備考はそれぞれ検索窓です。 実行すると、 「オブジェクト変数またはWithブロック変数が設定されていません」 というメッセージがでます。 また、動作としては部所の検索のみでき、 内容、備考検索は上記のエラーメッセージが出てできない状態です。 アドバイスよろしくお願いいたします。 以下がコードになります。 Private Sub cmd01_Click() Me.FilterOn = False If txt部所 <> "" Then Me.Filter = "[部所氏名]like '*" & txt部所 & "*'" ElseIf txt内容 <> "" Then Me.Filter = "[内容]like '*" & txt内容 & "*'" ElseIf txt備考 <> "" Then Me.Filter = "[備考]like '*" & txt備考 & "*'" ElseIf Nz(txt部所) & Nz(txt内容) & Nz(txt備考) = "" Then MsgBox "検索条件を入力してください" End If Me.FilterOn = True End Sub

  • ACCESSで複数検索をしたいのですが・・・

    T_1・・・テーブル  No.、得意先名、商品名、売上日、備考 Q_1・・・クエリ  「T_1」を元に作成 「Q_1」からなる「F_1」というフォームのヘッダーに [Txt得意先名]、[Txt商品名]、[Txt売上日]という3つのテキストボックスと、 検索ボタン[Cmd検索]を配置し、1~3つの条件を入力して検索する フォームを作りたいと考えています。 そこで、http://okwave.jp/qa/q2029954.html にあるコードを使い、 下記のコードを書いてみました。 ================= Private Sub Cmd検索_Click() Dim MyCriteria As String MyCriteria = "売上日 ="  If IsNull(Txt売上日) Then   MyCriteria = MyCriteria & True  ElseIf Not IsNull(Txt売上日) Then   MyCriteria = MyCriteria & "#" & Me!Txt売上日 & "#"  Else  End If strfilter = MyCriteria strfilter = strfilter & " And 得意先名 Like '*" & Me.Txt得意先名.Value & "*' And 商品名 Like '*" & Me.Txt商品名.Value & "*'" Filter = strfilter FilterOn = True Me.Requery End Sub ================= ただ、上記のコードでは、[Txt売上日]を空欄で検索した場合、 仮に「T_1」で売上日が未入力だった時にそのデータは検索してくれません。 自分でもいろいろ調べて試したのですが、なかなかうまくいかず・・・。 ご存知の方、教えていただけませんでしょうか? よろしくお願いいたします。

専門家に質問してみよう