お世話になります。
Accessを使い始めて半月ぐらいの初心者です
次のような条件の検索フォームの作成を依頼されたのですがうまく出来ません。
(1)Accessのフォームフィルタを使用した検索フォームで、3つのテキストボックス(以下TB)を同一
フォーム上に用意し、抽出を実行するボタンと解除するボタンをTBの隣にそれぞれ用意する
(2)あいまいな条件(部分一致)で検索出来るようにする
(3)抽出結果も同一フォーム上に表示
(4)任意のTBに入力した値で抽出後、他のTBを利用し
絞り込み検索を実行できるようにしたい
現在は下記のように作成しました。
●テーブル
[管理番号]、[品名品番]、[仕入先名]のフィールドを持つテーブルを用意。
●フォーム(表形式)
上記テーブルに連結した検索フォームを作成し、抽出する値を入力する
TBの名前はそれぞれ下のように付けました。
フィールド名 TB名
・[管理番号]⇒管理番号検索
・[品名品番]⇒品名品番検索
・[仕入先名]⇒仕入先名検索
・[抽出実行ボタン]のイベント(管理番号で検索時)
Private Sub コマンド47_Click()
Me.Filter = "管理番号 Like '*" & Me!管理番号検索 & "*'"
Me.FilterOn = True
End Sub
・[抽出解除ボタン]のイベント(管理番号で検索時)
Private Sub コマンド49_Click()
Me!管理番号検索 = Null
Me.FilterOn = False
End Sub
他2つも同様に作成して実行した結果、単体での抽出はうまくいくのですが
さらに絞り込もうと他のTBに値を入力して抽出を実行すると先の抽出が解除され
単体でのフィルタがかかって抽出されてしまいます。
どなた様か良い案が御座いましたらご指導ください。
初心者のため、説明不足な点があるかと思いますが
不明な点がございましたらご質問くださいませ。
宜しくお願い致します。
No.1ベストアンサー
- 回答日時:
とりあえずやるなら、
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つずつ用意すれば宜しいのでしょうか?
視覚的に書くと、現在はフォーム上で下記のように配置しています。
[管理番号検索TB] [抽出ボタン] [解除ボタン]
[品名品番検索TB] [抽出ボタン] [解除ボタン]
[仕入先名検索TB] [抽出ボタン] [解除ボタン]
No.2
- 回答日時:
>ところで上記方法ですと[抽出実行ボタン]と[抽出解除ボタン]はそれぞれテキストボックスごとに用意しないで、代表のものを1つずつ用意すれば宜しいのでしょうか?
そうですねイメージ的にはこんな感じ
(視覚的イメージお借りしますね)
[検索条件ラベル]
[管理番号検索TB]
[品名品番検索TB]
[仕入先名検索TB]
[抽出ボタン][解除ボタン]
>視覚的に書くと、現在はフォーム上で下記のように配置しています。
>[管理番号検索TB] [抽出ボタン] [解除ボタン]
>[品名品番検索TB] [抽出ボタン] [解除ボタン]
>[仕入先名検索TB] [抽出ボタン] [解除ボタン]
たとえば、上記の場合で
「3項目ともフィルタかけてあって、どれか1項目フィルタ解除したい」
となった場合、動作的には
「残った2項目で再度フィルタをかけなおす」
という動作になります
となると[解除ボタン]の役割が内部ではフィルタ実行になります
何かおかしいですね
ですから、上記のほうが一般的だと思われます
(アプリケーションの仕様にもよりますが)
ありがとうございます。
望んでいた機能が無事に走るようになり、大変満足しております。
また、コピー&ペーストで対応出来るようにこちらの環境に合わせてソースを書いていただけた事、
処理の効率まで考慮して作成して頂けた事に大変感激致しました。
お忙しいなかご対応ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Access(アクセス) Accessでセレクタをダブルクリックで別フォームで詳細表示 3 2022/12/20 10:36
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Access(アクセス) Accessで予定表を作成しようとしてます。 テーブル フィールド名 連番 オートナンバー型 年月日 2 2023/07/23 11:40
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Access(アクセス) Accessフォーム 一部のレコードだけを抽出する方法について 1 2022/06/28 18:45
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessのフォームで、空欄のレ...
-
SQL*Loader
-
年月日を持つテーブルから年月...
-
複数条件検索について
-
ACCESSのフォーム上で複数検索...
-
ACCESS2003 でクエリの抽出条件...
-
AccessにてExcelファイル名にパ...
-
DBソフト ACCESS:検索フォー...
-
検索フォームで空白を抽出したい
-
アクセス マクロのメッセージ...
-
アクセスのフォームにカンマ区...
-
access 検索フォームで検索が...
-
アクセス フォームに検索ボタン...
-
Access レポート印刷するときに...
-
レコードを保存するコード ア...
-
データベースのINT型項目にNULL...
-
アクセスで数値型のフィールド...
-
Word縦書きで左から右への行
-
クエリで出来た表にチェックボ...
-
ACCESS──メインフォームでサブ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
年月日を持つテーブルから年月...
-
SQL*Loader
-
Accessのフォームで、空欄のレ...
-
検索フォームで空白を抽出したい
-
ACCESSのフォーム上で複数検索...
-
VBAからクエリのパラメータを設...
-
ACCESS2003 でクエリの抽出条件...
-
アクセス マクロのメッセージ...
-
Accessの検索フォームで。
-
Access2007のサブフォームのReq...
-
パススルークエリの動的パラメ...
-
ACCESS マクロで検索に...
-
access 検索フォームで検索が...
-
AccessにてExcelファイル名にパ...
-
Access2000で文字列中の半角ス...
-
アクセスの複数検索で日付の絞...
-
AccessのデータをExcelテンプレ...
-
アクセスのフォームにカンマ区...
-
DBソフト ACCESS:検索フォー...
-
Accessでの電話番号下4桁での検...
おすすめ情報