こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

部分一致での検索方法

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

投稿日時 - 2003-05-07 10:45:14

QNo.541153

すぐに回答ほしいです

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

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分の最初の"*"を外せば、後方一致になります。

投稿日時 - 2003-05-07 11:42:10

補足

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

できれば、今のままのフォームを使用したいと思っています。1つのテキストボックスで上記のような仕様にするここは可能でしょうか?

あと、検索ボタンのほかにリセットボタンを追加して
リセットをクリックするとテキストボックスの内容が
リセットする方法はご存知でしょうか?

以上、よろしくお願い致します。

投稿日時 - 2003-05-07 12:51:42

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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 (オプションボタンも特定のところにリセットしたい場合)


先ほどの回答の最後の文章は、「後方一致」ではなく「前方一致」の誤りでした。

投稿日時 - 2003-05-07 17:24:44

お礼

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

下記の補足ですが、当方の勘違いでした。
うまく検索することができました。

本当にありがとうございました。

投稿日時 - 2003-05-08 08:37:06

あなたにオススメの質問