- ベストアンサー
Accessのフォーム上で、フィルタをかけたい。
商品管理フォームをつくってます。accessは自己流です。 主なテーブル構成は、決済日、仕入先、仕入金額などです。 ここでのフォームのフィールドは、クエリをかけグループ化し、仕入金額は、合計としてます。 そこでですが、2種類のフィルタのかける方法をしたいです。 1つは、決済日ごとにフィルタをかけ小計を出すことです。 例えば決済日が8月10日でフィルタをかけ、仕入先ごとの支払合計金額をだす。 2つめは、決済日が8月10で仕入先をさらにフィルタをかけ支払合計金額をだすことです。 例えば決済日が8月10日で、仕入先が”A”でフィルタをかけ、8月10日の仕入先Aの支払合計金額をだす。 この処理を、別テキストボックスとして、決済日抽出、仕入先抽出、コマンドボタンとして、決済日抽出開始、決済日と仕入先抽出開始をつくりました。 決済日抽出開始のクリック時のマクロビルダとして、フィルタの実行でwhere条件式に[決済日]=[Forms]![販売管理]![決済日抽出]をいれ、できました。 決済日、仕入先抽出開始のクリック時については、上記のwhere式をいれ更にand 以降に同様な考えでいれ、フィルタができました。 そこでですが、コマンドボタンを1つにしてマクロビルダをまとめることをしたいです。 私的には、マクロビルダを1行ずつだったのを、2行(続けて2段の状態)にし、条件式を入れればいいかと思いました。 ただそれだけですと駄目だと思いますので、条件式を入れればいいかなと思いました。 決済日のみを抽出する場合の条件式としては、[仕入先] is null 決済日と仕入先の2つの条件で抽出する場合は、…わかりません。 片方が空欄(仕入先抽出が空欄)のときは、決済日のフィルタ。両方はいってるときは、両方でフィルタというのを1つのコマンドボタンでするのは無理なのでしょうか? 長々となってしまいましたが、よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
ウーン! 普通は、フォームには 抽出する仕入先 [_______] を初期値とし、抽出した仕入先の行をクリックしたら 抽出する仕入先 [A______] とするように仕組むと思いますが。 この場合、 Private Sub コマンド_抽出_Click() Dim strWhere As String If Len(Me.抽出する仕入先 & "") > 0 Then strWhere = "XXXXXXXXX" Else strWhere = "YYYYYYYYY" End If Me.FilterOn = False Me.Filter = strWhere Me.FilterOn = True End Sub Private Sub コマンド_抽出キャンセル_Click() Me.FilterOn = False End Sub このように、全体の構想のいかんに関わらず、条件でフィルターのセットを変えるだけです。
その他の回答 (1)
このような場合私は、抽出したい項目(例:仕入先、決済日)を入力するテキストボックスを作成し、 「絞り込み実行」ボタンのクリック・イベントプロシージャで、抽出したい項目のテキスト・ボックスから フィルタを作成し「FilterOn」をTrueにして「Requery」をかけています。 当然、テキスト・ボックスの内容が「Null」やスペースのみだった場合は、条件から外す工夫をしています。 例:If Trim(Nz(tbテキストボックス名,"")) <> "" then などで切り分け また、条件入力用テキスト・ボックスルのクリアボタン、「絞り込み解除」ボタン、「絞り込み中」表示ラベルも作成しています。