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
No.1ベストアンサー
- 回答日時:
ひとつのテキストボックス(仮に名前を、全検索)が有るとすると
提示されたコードの、AND を全て OR に書き換えて
検索対象の、Me.姓検索 などを全てMe!全検索にすると出来るかと
思いますが、
そうすると、たとえば”市川”で検索すると
名前が市川や住所の市川市などもヒットしてしまいます。
かといって AND では全ての条件に収まるレコードは
おそらく有り得ないので常に何もヒットしなくなります。
なので、OR 検索の方向でもう少し考えると・・・
リストボックスを作成し、(名前は仮に LB1 とします)
値集合タイプを、フィールドリスト
値集合ソースに、フォームのレコードソース名 とします。
複数選択は、標準 または 拡張に。
今回は、コマンドボタンのクリック時イベントに割り当ててみました。
ご参考までに。※投稿用にタブを全角スペースに変換しています。
『コマンドボタンあれ』のクリック時イベントに下記をコピペ
Private Sub コマンドボタンあれ_Click()
Dim varItem As Variant
Dim strItem As String
Dim strArray() As String
Dim strFilter As String
Dim i As Integer
If Me!LB1.ItemsSelected.Count = 0 Then 'リストボックスが選択されていない場合
Me.FilterOn = False
Exit Sub
End If
For Each varItem In Me!LB1.ItemsSelected 'リストボックスの内容を変数に格納
strItem = strItem & Me!LB1.ItemData(varItem) & Chr(124)
'多分使わないであろう文字 | Chr(124)を区切り記号にしています
Next
strItem = Left(strItem, Len(strItem) - 1)
Me.Filter = ""
strArray = Split(strItem, Chr(124), , vbDatabaseCompare) '配列に収めます
For i = 0 To UBound(strArray) '配列からFilter文の作成
strFilter = strFilter & "([" & strArray(i) & "]" _
& " like '*" & Me!全検索 & "*')" & " OR "
Next
strFilter = Left(strFilter, Len(strFilter) - 4) '末尾の" OR "を削除
' Debug.Print strFilter
Me.Filter = strFilter
If DCount("*", Me.RecordSource, Me.Filter) = 0 Then
MsgBox "知らない", vbOKOnly
Exit Sub
End If
Me.FilterOn = True
End Sub
お礼が遅くなり申し訳ございません。
今まで試行錯誤していたのですが、どうもうまくいきませんでした。
VBA自体がよく分かってないということもあり、
ご説明にありました、AND を全て OR に書き換えて、
Me.姓検索 などを全てMe!全検索にする
という部分を試してみたりしたのですが、検索されず失敗に終わりました。
現状の私には敷居が高いということが分かっただけでも良かったです。
VBAをもう少し勉強してからもう一度試してみたいと思います。
ありがとうございました。
No.2
- 回答日時:
勘違いがあるかもわかりませんが
Function exeFilter(送り値1, 送り値2 As String) As String
If Not IsNull(送り値1) Then
exeFilte = " AND 送り値2 Like '*" & 送り値2 & "*'"
End If
End Function
Private Sub Form_AfterUpdate()
Dim strFilter As String
strFirter = exeFilter(姓, 姓検索) & exeFilter(名, 名検索) & exeFilter(姓ふりがな, 姓ふりがな検索)
strFirter = strFiter & exeFilter(名ふりがな, 名ふりがな検索) & exeFilter(住所1, 住所1検索)
strFirter = strFiter & exeFilter(住所2, 住所2検索) & exeFilter(住所1ふりがな, 住所1ふりがな検索)
strFirter = strFiter & exeFilter(住所2ふりがな, 住所2ふりがな検索) & exeFilter(住所1, 住所1検索)
End Sub
追伸
失礼があったらすみません
関数とサブルーチンについて見直してください
関数
Function 戻り値(送り値1, 送り値2 As String) As String
命令文
戻り値=○○
end Function
サブルーチン
1.主ルーチンのステップが大きいとき 処理を分割して分かりやすくする
2.同じ処理が各所に入るとき
1.の場合
privatesub 主処理()
…
従RTN2
…
…
従RTN3
…
end sub
Pribatesub 従RTN1()
…
end sub
Pribatesub 従RTN2()
…
end sub
Pribatesub 従RTN3()
…
end sub
以上ですが
あなたのコーディングで期待通りの結果が得られましたか?
関数処理でなくて サブルーティン的な記述です
private SUB で初めて ENDsubで終わっても同じ結果になる
お礼が遅くなり申し訳ございません。
今まで試行錯誤していたのですが、どうもうまくいきませんでした。
VBA自体がよく分かってない為、
現状の私には敷居が高いということが分かっただけでも良かったです。
VBAをもう少し勉強してからもう一度試してみたいと思います。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ゆるやかでぃべーと タイムマシンを破壊すべきか。
これはディベートの論題だと仮定したうえでの回答お願いします。あなたは、その末にタイムマシンを壊してしまうのか、使い道を探すのかどうかを考えてもらいたいです。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
ACCESS検索★ある文字を複数のフィールドの中から検索したい
その他(コンピューター・テクノロジー)
-
アクセスのfilter、複数条件の記述方法を教えてください。
Access(アクセス)
-
Access 複数条件検索の設定が上手く行きません
Access(アクセス)
-
-
4
Access 起動時、ウィンドウを最大化したいです
Access(アクセス)
-
5
アクセスVBA フォームのスクロールバーを動かす。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access レポート印刷するときに...
-
Access Error3061 パラメータが...
-
Accessのクエリで、replace関数...
-
Accessレポートのチェックボッ...
-
実行時エラー3131 FROM 句の構...
-
教えてください! アクセスの書...
-
ACCESS VBA でのエラー解決の根...
-
accessでlaccdbファイルが削除...
-
Accessのスプレッドシートエク...
-
Vba Userformを前面に出すについて
-
Accessのクエリの結果を、既存...
-
【Access】Dcount関数の複数条...
-
access2021 強制終了してしまう
-
Accessのリンクテーブルのパス...
-
【アクセス】レポート テキスト...
-
Microsoft365にAccessってあり...
-
Access 複数条件検索の設定が上...
-
アクセス レポートを開いたとき...
-
テーブルとクエリの相関図は表...
-
DoCmd.SearchForRecord が動か...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アメリカの電話番号から住所を...
-
USJは何区?何市??
-
解約した携帯番号から住所を割...
-
Google Mapに新しい住所を登録...
-
グーグルマップで住所特定され...
-
住所から自宅の電話番号は分か...
-
1つのテキストボックスで全フ...
-
アクセス2007にて複数フィール...
-
自宅のWi-FiのIPアドレスがばれ...
-
ウーバーイーツを注文したとこ...
-
世界遺産の住所一覧を検索する...
-
フリーソフト,の検索エンジンソ...
-
電話番号から住所がわかります...
-
会社名を調べたいのですが?
-
自宅の電話番号から住所や名前...
-
ある人に住所を教えてもらった...
-
LINE交流を始めるには・・・
-
知っていると便利なサイト教え...
-
今日初めてAppleMusicの無料1ヶ...
-
写真右上にあるNのようなマーク...
おすすめ情報