- ベストアンサー
Accessでの検索フォーム作成
- Accessを使い始めて半月ぐらいの初心者が、検索フォームの作成方法について質問します。
- 条件を満たす検索フォームの作成方法や、部分一致での検索を実現する方法を知りたいです。
- また、複数のテキストボックスを組み合わせて絞り込み検索を行う方法についても教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
とりあえずやるなら、 Me.Filter = "管理番号 Like '*" & Me!管理番号検索 & "*'" ↓ Me.Filter = "((管理番号 Like '*" & Me!管理番号検索 & "*') " & _ "And (品名品番 Like '*" & Me!品名品番検索 & "*') " & _ "And (品名品番 Like '*" & Me!品名品番検索 & "*'))" だが、検索項目が3つあるみたいなので3つも同じような処理を記述するのは効率が悪い そこで下記みたいなフィルタ文字列を返すプロシージャを作成してみる ※検索項目に何も入力されていなければ検索条件にはならない (下記をコピって、フォーム内貼り付け) Private Function GetFilterString() as String Dim strWhere As String strWhere = "" If Not IsNull(Me.管理番号検索.Value) Then If Len(strWhere) <> 0 Then strWhere = strWhere & " And " strWhere = strWhere & "(管理番号 Like '*" & Me.管理番号検索.Value & "*')" End If If Not IsNull(Me.品名品番検索.Value) Then If Len(strWhere) <> 0 Then strWhere = strWhere & " And " strWhere = strWhere & "(品名品番 Like '*" & Me.品名品番検索.Value & "*')" End If If Not IsNull(Me.仕入先名検索.Value) Then If Len(strWhere) <> 0 Then strWhere = strWhere & " And " strWhere = strWhere & "(仕入先名 Like '*" & Me.仕入先名検索.Value & "*')" End If GetFilterString = strWhere End Function そして、抽出実行ボタンのイベントを下記のように書き換える ・[抽出実行ボタン]のイベント Private Sub コマンド47_Click() '//Me.Filter = "管理番号 Like '*" & Me!管理番号検索 & "*'" Me.Filter = GetFilterString Me.FilterOn = True End Sub 抽出実行ボタンのイベントはそのままでもいいかと
その他の回答 (1)
- how-do-you-do
- ベストアンサー率56% (59/104)
>ところで上記方法ですと[抽出実行ボタン]と[抽出解除ボタン]はそれぞれテキストボックスごとに用意しないで、代表のものを1つずつ用意すれば宜しいのでしょうか? そうですねイメージ的にはこんな感じ (視覚的イメージお借りしますね) [検索条件ラベル] [管理番号検索TB] [品名品番検索TB] [仕入先名検索TB] [抽出ボタン][解除ボタン] >視覚的に書くと、現在はフォーム上で下記のように配置しています。 >[管理番号検索TB] [抽出ボタン] [解除ボタン] >[品名品番検索TB] [抽出ボタン] [解除ボタン] >[仕入先名検索TB] [抽出ボタン] [解除ボタン] たとえば、上記の場合で 「3項目ともフィルタかけてあって、どれか1項目フィルタ解除したい」 となった場合、動作的には 「残った2項目で再度フィルタをかけなおす」 という動作になります となると[解除ボタン]の役割が内部ではフィルタ実行になります 何かおかしいですね ですから、上記のほうが一般的だと思われます (アプリケーションの仕様にもよりますが)
お礼
ありがとうございます。 望んでいた機能が無事に走るようになり、大変満足しております。 また、コピー&ペーストで対応出来るようにこちらの環境に合わせてソースを書いていただけた事、 処理の効率まで考慮して作成して頂けた事に大変感激致しました。 お忙しいなかご対応ありがとうございました。
お礼
ご連絡ありがとうございます。 おかげ様で目的の動作を完成させる事が出来ました。 ところで上記方法ですと[抽出実行ボタン]と[抽出解除ボタン]はそれぞれテキストボックスごとに用意しないで、代表のものを1つずつ用意すれば宜しいのでしょうか? 視覚的に書くと、現在はフォーム上で下記のように配置しています。 [管理番号検索TB] [抽出ボタン] [解除ボタン] [品名品番検索TB] [抽出ボタン] [解除ボタン] [仕入先名検索TB] [抽出ボタン] [解除ボタン]