- ベストアンサー
部分一致での検索方法
- Access2000のVBAで3つのオプションボタンでフィールドを選択し、1つのテキストボックス(オプションテキスト)に文字列を入力して検索ボタンで検索するプログラムを作成しました。
- 完全一致した場合は問題なく表示されるのですが、部分一致した場合でも表示させる方法がわかりません。
- どのようにすればテキストボックスに入力した文字列が部分一致した場合にも表示させることができるでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
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分の最初の"*"を外せば、後方一致になります。
その他の回答 (1)
- software
- ベストアンサー率28% (24/84)
#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 (オプションボタンも特定のところにリセットしたい場合) 先ほどの回答の最後の文章は、「後方一致」ではなく「前方一致」の誤りでした。
お礼
ご回答ありがとうございます。 下記の補足ですが、当方の勘違いでした。 うまく検索することができました。 本当にありがとうございました。
補足
ご回答ありがとうございます。 できれば、今のままのフォームを使用したいと思っています。1つのテキストボックスで上記のような仕様にするここは可能でしょうか? あと、検索ボタンのほかにリセットボタンを追加して リセットをクリックするとテキストボックスの内容が リセットする方法はご存知でしょうか? 以上、よろしくお願い致します。