部分一致での検索方法

このQ&Aのポイント
  • Access2000のVBAで3つのオプションボタンでフィールドを選択し、1つのテキストボックス(オプションテキスト)に文字列を入力して検索ボタンで検索するプログラムを作成しました。
  • 完全一致した場合は問題なく表示されるのですが、部分一致した場合でも表示させる方法がわかりません。
  • どのようにすればテキストボックスに入力した文字列が部分一致した場合にも表示させることができるでしょうか。
回答を見る
  • ベストアンサー

部分一致での検索方法

Access2000のVBAで3つのオプションボタンでフィールドを選択し、1つのテキストボックス(オプションテキスト)に文字列を入力して検索ボタンで検索するプログラムを以下のような記述の仕方で作成しました。 完全一致した場合は問題なく表示されるのですが、できればテキストボックスに入力した文字列が部分一致した場合でも表示させるようにしたいのですが、どうすればよいかがわからないので教えてください。 Private Sub オプション検索_Click() Dim stFilter As String Dim stDocName As String If 特定検索 = 1 Then stDocName = "フォーム名"   stFilter = "フィールド名1='" & テキストボックス名 & "'" DoCmd.OpenForm stDocName, , , ElseIf 特定検索 = 2 Then stDocName = "フォーム名" stFilter = "フィールド名2='" & テキストボックス名 & "'" DoCmd.OpenForm stDocName, , , stFilter ElseIf 特定検索 = 3 Then stDocName = "IPForm" stFilter = "フィールド名3='" & テキストボックス名 & "'" DoCmd.OpenForm stDocName, , , stFilterOn End If End Sub

  • picca
  • お礼率5% (5/90)

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

  • ベストアンサー
  • software
  • ベストアンサー率28% (24/84)
回答No.1

1.条件入力のフォームに非表示属性のテキストボックスを3つ作成します。(例 非表示1、非表示2、非表示3) 2.検索ボタンのVBAを修正します。 Private Sub オプション検索_Click() Dim stDocName As String stDocName = "フォーム名" Me.非表示1 = Null Me.非表示2 = Null Me.非表示3 = Null If 特定検索 = 1 Then Me.非表示1 = Me.テキストボックス名 ElseIf 特定検索 = 2 Then Me.非表示2 = Me.テキストボックス名 ElseIf 特定検索 = 3 Then Me.非表示3 = Me.テキストボックス名 End If DoCmd.OpenForm stDocName End Sub 3.検索結果を表示するフォームのレコードソースを修正します。("###"は入力条件のフォーム名) フィールド名1の抽出条件に Like ("*" & [Forms]![###]![非表示1] & "*") フィールド名2の抽出条件に Like ("*" & [Forms]![###]![非表示2] & "*") フィールド名3の抽出条件に Like ("*" & [Forms]![###]![非表示3] & "*") これで出来ると思います。 Like分の最初の"*"を外せば、後方一致になります。

picca
質問者

補足

ご回答ありがとうございます。 できれば、今のままのフォームを使用したいと思っています。1つのテキストボックスで上記のような仕様にするここは可能でしょうか? あと、検索ボタンのほかにリセットボタンを追加して リセットをクリックするとテキストボックスの内容が リセットする方法はご存知でしょうか? 以上、よろしくお願い致します。

その他の回答 (1)

  • software
  • ベストアンサー率28% (24/84)
回答No.2

#1です。 追加するテキストボックスは非表示属性にするため、見た目は元のフォームと変わりませんがまずいのでしょうか? テキストボックスを追加しない方法を示します。 検索結果を表示するフォームのレコードソースを修正します。  説明のための条件仮定   ・条件入力のフォーム名を[フォーム名]とする。   ・オプションボタンを設定しているフレーム名を[フレーム名]とする。   ・オプションボタンの値をそれぞれ1,2,3とする。 フィールド名1の抽出条件に Like (IIf([Forms]![フォーム名]![フレーム名]=1,"*" & [Forms]![フォーム名]![テキストボックス名] & "*","*")) フィールド名2の抽出条件に Like (IIf([Forms]![フォーム名]![フレーム名]=2,"*" & [Forms]![フォーム名]![テキストボックス名] & "*","*")) フィールド名3の抽出条件に Like (IIf([Forms]![フォーム名]![フレーム名]=3,"*" & [Forms]![フォーム名]![テキストボックス名] & "*","*")) リセットボタンはClickのイベントに以下の命令を指定します。 Me.テキストボックス名 = Null Me.フレーム名 = 1 (オプションボタンも特定のところにリセットしたい場合) 先ほどの回答の最後の文章は、「後方一致」ではなく「前方一致」の誤りでした。

picca
質問者

お礼

ご回答ありがとうございます。 下記の補足ですが、当方の勘違いでした。 うまく検索することができました。 本当にありがとうございました。

関連するQ&A

  • VBAでのj検索

    Access2000のVBAで18つのチェックボタンでフィールドを選択し、1つのテキストボックスに文字列を入力して検索ボタンで検索するプログラムを以下のような記述の仕方で作成しました。 Private Sub 条件検索_Click() Dim stFilter As String Dim stDocName As String If 特定検索 = 1 Then stDocName = "メイン" stFilter = "フィールド名1='" & テキストボックス名 & "'" DoCmd.OpenForm stDocName, , , stFilter ElseIf 特定検索 = 2 Then stDocName = "メイン" stFilter = "フィールド名2='" & テキストボックス名 & "'" DoCmd.OpenForm stDocName, , , stFilter ・ ・ 上記のような記述で上手くいかないので、部分一致で検索 出来る方法を教えていただけませんでしょうか。 よろしくお願い致します。

  • access レコードソースを選択し、DoCmd.OpenFormする方法

    Select Caseのフレームで、レコードソース(クエリ)を選択し、 そのソースを基にDoCmd.OpenFormする方法がわかりません。 よろしくお願いします。 ---------------------------------------------------- Dim strSource As String Dim Q1, Q2 As String Dim stDocName As String Dim フォーム1 As Form stDocName = "フォーム1" Q1 = "クエリ1" Q2 = "クエリ2" Select Case フレーム1 Case 1 strSource = Q1 Case 2 strSource = Q2 End Select 'stDocName.RecordSource = strSource '-----この文はこの位置でよいのでしょうか? DoCmd.OpenForm stDocName, acFormDS ---------------------------------------------------- クエリ1,クエリ2は基になるテーブルが違いますが、フィールドは同一にしてあります。 ですのでフォーム1には、対応するテキストボックスは用意してあります。

  • テキストボックスから一致したデータを抽出したい。

    初心者です。Access2003で、 (1)テーブルで「氏名」、「住所」のデータを作成。 (2)フォームでテキストボックス(txt_入力)とコマンドボタンを作成。 (3)押下時で開くようなフォームを作成(F_データリスト) テキストボックス(txt_入力)に氏名を入力し、テーブルと一致したものだけを抽出したい。 以下のように記述するとコマンド45押下でパラメータの入力画面がでてしまします。助けてください。 Private Sub コマンド45_Click() On Error GoTo Err_コマンド45_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = "F_データリスト" stLinkCriteria = "[氏名]=" & " Me![txt_入力]" DoCmd.OpenForm stDocName, , , stLinkCriteria 以下省略。

  • accessで、フォームの検索をしたいのです。

    今ACCESSで、データ管理をしているのですが、どうしてもうまくいかなくて、困っています。 毎日の出来事を記述するテーブル用のフォームを作って、記述していて、そのデータがたまってきています。 他のフォームに、検索用のテキストボックスとコマンドボックスを作って検索したいのです。 コントロールウィザードを使うと、完全一致のデータしかでてこないのですが、部分一致のレコードを表示させるにはどうすればいいのですか? 教えていただけるとうれしいです。 コントロールウィザードを使うと以下のようになります。多分少しどこかを変えるといいのではないかと思うのです。どうか、よろしくお願いします。 Private Sub コマンド144_Click() On Error GoTo Err_コマンド144_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = ChrW(21839) & ChrW(12356) & ChrW(21512) & ChrW(12431) & ChrW(12379) & ChrW(12513) & ChrW(12514) stLinkCriteria = "[内容]=" & "'" & Me![テキスト105] & "'" DoCmd.OpenForm stDocName, , , stLinkCriteria Exit_コマンド144_Click: Exit Sub Err_コマンド144_Click: MsgBox Err.Description Resume Exit_コマンド144_Click End Sub もしかして。。と思い、以下の部分、 stLinkCriteria = "[内容]=" & "'" & Me![テキスト105] & "'" を次のように変えてみたけれど、やっぱりうまくいきませんでした。 stLinkCriteria = "[内容]=" & "'" & "*" & Me![テキスト105] & "*" & "'" よろしくお願いします。

  • ウイザードからのVBAでクエリー名をコードでなく文字にするには

    マシンによっては、以下の2の形式でウイザードを使ったVBAで表示されるのですが 1の形のマシンがありどこの設定をすればよいか教えてください ACCESSXPです。 1.コードになっている Dim stDocName As String Dim stLinkCriteria As String stDocName = ChrW(-30163) & ChrW(23450) & ChrW(12501) & ChrW(12457) & ChrW(12540) & ChrW(12512) DoCmd.OpenForm stDocName, , , stLinkCriteria 2、日本字になっている Dim stDocName As String Dim stLinkCriteria As String stDocName = "設定フォーム" DoCmd.OpenForm stDocName, , , stLinkCriteria よろしくお願いします

  • フォームの検索で一致データが無い場合の表示

    簡単なシステムを作成している初心者です。 エクセル2003を使用しています。 コマンドウィザードを使用してVBAに入力されている状態です。 検索用のフォーム(F_番号検索)で番号を入力し(テキストボックス[番号入力欄])、検索コマンドを押し 一致した番号の情報のみ別フォーム(F_情報)に表示されます 一致した番号の情報がなくても F_情報のフォームが開いてしまうのですが、 これを別フォームでもしくはメッセージボックスで「一致する番号はありません」等の表示 をしたいのですが上手くいきません。 どうすればいいでしょうか・・・? Private Sub 検索_Click() On Error GoTo Err_検索_Click Dim stDocName As String Dim stLinkCriteria As String stLinkCriteria = "[番号]=" & "'" & Me![番号入力欄] & "'" DoCmd.OpenForm "F_情報", , , stLinkCriteria [Forms]![F_番号検索].Visible = True Exit_検索_Click: Exit Sub Err_検索_Click: MsgBox Err.Description Resume Exit_検索_Click End Sub

  • Access フォームで検索した結果をフォームで表示するときにあいまい検索をしたい

    Access2003を使用して、検索フォームをつくり、検索結果を別フォームへ表示させるプログラムを組みました。 その際に、かな検索をするとかなが完全一致でないと検索されません。 あいまい検索にてかな検索をする方法はありませんでしょうか? ソースは以下の通りです。 Private Sub cmdSearch_Click() On Error GoTo Err_cmdSearch_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = ChrW(70) & ChrW(95) stLinkCriteria = "[カナ氏名]=" & "'" & Me![カナ氏名] & "'" DoCmd.OpenForm stDocName, , , stLinkCriteria Exit_cmdSearch_Click: Exit Sub Err_cmdSearch_Click: MsgBox Err.Description Resume Exit_cmdSearch_Click End Sub

  • Access VBAでのフィルタ処理

    アクセス2003を使用しています。 今VBAを使用して、フォームのテキストボックスに記入された文字列を検索条件に、 クエリからデータ抽出したいのですが、 うまくいきません。 解決したい事は、 「abc*」といったように、前方が一致している文字列データを すべて抽出するといった処理です。 今は下記のようなプログラムを組んでいます。 Private Sub コマンド1_Click() On Error GoTo Err_コマンド1_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = "クエリ1" DoCmd.OpenQuery stDocName, acNormal, acEdit If IsNull(テキストボックス) Then Else stLinkCriteria = "[クエリデータ]=" & "'" & Me![テキストボックス] & "'" End If DoCmd.ApplyFilter stDocName, stLinkCriteria Exit_コマンド1_Click: Exit Sub Err_コマンド1_Click: MsgBox Err.Description Resume Exit_コマンド1_Click End Sub これだと完全に一致しなければ抽出してくれません。 どの様に変更すればよいでしょうか? よろしくお願いします。

  • 【Access】複数フィールドを対象とする検索

    Access上で「検索ボタン」をクリックすると、 「データ」フォームのフィールド1、フィールド2、フィールド3のいずれかに「検索条件1」の語を含み、かつ、フィールド4、フィールド5、フィールド6のいずれかに「検索条件2」の語を含むレコードを抽出できるようにしたいと思います。 検索条件はテキストボックスに入力するようにしており、テキストボックス名は「検索条件1」、「検索条件2」となっています。 以下のコードでやってみたのですが、「実行時エラー13、型が一致しません」というエラーが出てうまく抽出できません。 Private Sub 検索ボタン_Click() Dim filter1 As String filter1 = "フィールド1 like '*" & Me!検索条件1 & "*' or フィールド2 like '*" & Me!検索条件1 & "*' orフィールド3 like '*" & Me!検索条件1 & "*'" And " フィールド4 like '*" & Me!検索条件2 & "*' or フィールド5 like '*" & Me!検索条件2 & "*' orフィールド6 like '*" & Me!検索条件2 & "*'" DoCmd.OpenForm "データ", acNormal Forms!データ!.filter = filter1 Forms!データ!.FilterOn = True End Sub 「検索条件1,2」のテキストボックスがあるフォーム上の「検索ボタン」をクリックすると、 「データ」フォームが開き、検索をかけるという流れをイメージして作成 しています。 どなたか正しい記述を教えていただけませんでしょうか。 よろしくお願いいたします。

  • accessの検索で・・・

    お世話になっております。 今、OfficeXPで、Accessを使ってデータベースを作っています。 そこで、フィルタについて教えていただけないでしょうか(TへT) まずは、こんな感じでVBAを書いてみたのですが・・・ Private Sub kensaku_Click() Dim rsql1 As String Dim rsql2 As String Dim keys As String keys = InputBox("キーワードを入力してください", "キーワード検索") If keys = "" Then Exit Sub End If rsql1 = "select tel from master where dairi_code = keys" rsql2 = "select tel2 from master where contact_tel = keys" If rsql1 <> "" Then Me.Filter = "tel = '" & keys & "'" Me.FilterOn = True DoCmd.OpenForm "form_tel", acNormal, , "[tel] = '#" & key & "#'", acFormEdit, acDialog ElseIf rsql2 <> "" Then Me.Filter = "tel2 = '" & keys & "'" Me.FilterOn = True DoCmd.OpenForm "form_tel2", acNormal, , "[tel2] = '#" & key & "#'", acFormEdit, acDialog Else: MsgBox "該当するデータはありません", vbOKOnly End If End Sub と、いう感じです。 したいことは、2つのそれぞれのテーブルに検索をかけ、一致したのがあったらそれに対応するフォームを開くと言う感じにしたいです。 ロジック的に穴がありすぎると思いますが、どうかよろしくお願いいたします。

専門家に質問してみよう