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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) VBAで日付入力しているのですが 4 2023/03/02 11:25
- Visual Basic(VBA) ワークシート内を検索 1 2022/12/19 23:46
- Visual Basic(VBA) ユーザーフォームの表示を追加したい 2 2023/03/26 23:18
- Excel(エクセル) vba 転記するときの最終行について 2 2022/09/03 09:31
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access レポート印刷するときに...
-
ACCESS VBA でのエラー解決の根...
-
実行時エラー3131 FROM 句の構...
-
Microsoft365にAccessってあり...
-
Access Error3061 パラメータが...
-
Accessのクエリで、replace関数...
-
Access VBA [リモートサーバー...
-
CSVファイルの「0落ち」にVBA
-
アクセス ステップインのやり方
-
access2019の起動が遅い
-
Accessのリンクテーブルのパス...
-
Accessのテキストボックスの入...
-
チェックボックスにチェックが...
-
アクセスの更新クエリでカレン...
-
Accessのフォーム上のテキスト...
-
Accessで作ったデータベースをw...
-
【至急・画像あり】建物or住所...
-
Access で半角スペースと全角ス...
-
Accessレポートのチェックボッ...
-
アクセス レポートを開いたとき...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アメリカの電話番号から住所を...
-
USJは何区?何市??
-
住所から自宅の電話番号は分か...
-
グーグルマップで住所特定され...
-
解約した携帯番号から住所を割...
-
Google Mapに新しい住所を登録...
-
アクセス2007にて複数フィール...
-
1つのテキストボックスで全フ...
-
Googleで自宅付近の映像を見る方法
-
知っていると便利なサイト教え...
-
自宅の電話番号から住所や名前...
-
京都の古い住所を教えて下さい
-
ウーバーイーツを注文したとこ...
-
救急車の通報について
-
自宅のWi-FiのIPアドレスがばれ...
-
Excelの住所リストをgoogl...
-
Googleマップの自分の自宅の住...
-
龍王神社 熊本
-
youtubeの書き込みで住所特定さ...
-
奈良県大和郡山市
おすすめ情報