フィルターの操作


フォームフィルター

フォームにフィルターをかけるには「RunCommand」の「acCmdFilterByForm」でフォームフィルターを起動します。

Private Sub CmdFilter_Click()
'CmdFilterをクリック時にフォームフィルターを起動する
    DoCmd.RunCommand acCmdFilterByForm
    
End Sub

フォームフィルターであいまい検索を行う場合は面倒でも、*(アスタリスク)を使用しなければなりません。
その場合は抽出用のテキストボックスを作成し、「FilterOn」を使って抽出します。

Private Sub CmdFilter_Click()
'フィールド名「所属」からテキストボックス「条件」に入力された
'文字を含むデータを抽出する

    Me.Filter = "所属 Like ""*" & 条件 & "*"""
    Me.FilterOn = True
End Sub

コンボボックスの値でフィルターをかける

コンボボックスの値でフィルターをかける場合の例です。

'コンボ1のレコードソースにグループ化した所属をセットする
'コンボ1のレコードソース
SELECT tbl_社員.所属 FROM tbl_社員 GROUP BY tbl_社員.所属;

'抽出ボタンをクリックしたらコンボ1の値でフィルターをかける
Private Sub 抽出_Click()
  Me.Filter = "所属 = '" & コンボ1 & "'"
  Me.FilterOn = True

End Sub
***************************************************************
Private Sub コンボ1_AfterUpdate()
'コンボ1の値が更新されたらフィルターをかける
  Me.Filter = "所属 = '" & コンボ1 & "'"
  Me.FilterOn = True

End Sub

オプションボタンでフィルターをかける

フリガナをオプションボタンで抽出する方法です。

オプショングループ:フリガナ

'オプショングループ「フリガナ」のボタンの更新後処理に
'よってサブフォーム「s_リスト」フリガナにフィルタをかける
Private Sub フリガナ_AfterUpDate()
Select Case Me!fraフリガナ.Value
'あ行
Case 1
 Me!s_リスト.Form.Filter = "フリガナ Like '[ア-オ]*'"
'か行
Case 2
 Me!s_リスト.Form.Filter = "フリガナ Like '[カ-ゴ]*'"
'さ行
Case 3
 Me!s_リスト.Form.Filter = "フリガナ Like '[サ-ゾ]*'"
'た行
Case 4
 Me!s_リスト.Form.Filter = "フリガナ Like '[タ-ド]*'"
'な行
Case 5
 Me!s_リスト.Form.Filter = "フリガナ Like '[ナ-ノ]*'"
'は行
Case 6
 Me!s_リスト.Form.Filter = "フリガナ Like '[ハ-ボ]*'"
'ま行
Case 7
 Me!s_リスト.Form.Filter = "フリガナ Like '[マ-モ]*'"
'や行
Case 8
 Me!s_リスト.Form.Filter = "フリガナ Like '[ヤ-ヨ]*'"
'ら行
Case 9
 Me!s_リスト.Form.Filter = "フリガナ Like '[ラ-ロ]*'"
'わ行
Case 10
 Me!s_リスト.Form.Filter = "フリガナ Like '[ワ-ヲ]*'"
'すべて
Case 11
 Me!s_リスト.Form.Filter = ""
End Select

 Me!s_リスト.Form.FilterOn = True
End Sub

タブコントロールでフィルターをかける

タブが変更された時、タブのページインデックス対応した条件で抽出 します。
抽出するサブフォームのフィールドのデータとページインデックスの値が等しい データを作成します。

例)
tbl_社員の性別フィールドの値:男 = 0 女 =1
タブ0のタブインデックス:0 = 男 1 = 女 2 = 全て

タブ0のタブインデックスの状態を取得するテキストボックス「条件」を 不可視でメンフォーム「frm社員」に作ります。
サブフォーム「List」のレコードソースの抽出条件をテキストボックス「条件」 の値にする。

SELECT tbl_社員 FROM tbl_社員 
WHERE (((tbl_社員.性別) [Forms]![frm_社員]![条件]));

Private Sub タブ0_Change()
'タブ0変更時に以下の値をテキストボックス「条件」にセットして
'クエリーを実行
 Select Case Me!タブ0.Value
'男
  Case 0
   Me!条件 = "0"
'女
  Case 1
   Me!条件 = "1"
'全て
  Case 2
   Me!条件 = "*"
 End Select

 Me!List.Requery  'サブフォームの再クエリー
End Sub

このようにして、「クエリー」「SQL」の抽出条件でフィルターを実行することもできます。


チェックボックスにフィルターをかける

チェックボックスを使ってフィルターを実行ます。
フレ−ム1のオプションボタンの値でフィルターをかけます。

フォーム名:frm_社員
フレ−ム1のオプション値:0 = 男 1 = 女 (規定値:0)

Private Sub Form_Load()
'フォーム読み込み時、フレ−ム1の既定値=0 でフィルターを
'かける
   Me.Filter = "性別 = 0"
   Me.FilterOn = True
End Sub
******************************************************
Private Sub フレーム1_AfterUpdate()
'フレ−ム1のオプション値の更新後処理でフィルターを
'かける
  If フレーム1.Value = 0 Then
   Me.Filter = "性別 = 0"
  ElseIf フレーム1.Value = 1 Then
   Me.Filter = "性別 = 1"
  End If

  Me.FilterOn = True
End Sub

サブフォームにフィルターをかける

コンボボックスの値でサブフォームにフィルターを実行ます。
フォームヘッダーに[Cmb車検月] をつくります。

フォーム名:frm_車両管理
 コンボボックス名:Cmb車検月
 値:SELECT 車両管理.車検月 FROM 車両管理 GROUP BY 車両管理.車検月;
 サブフォームの抽出するフィールド:車検月

Private Sub Cmb車検月_AfterUpdate()
'コンボボックスの値でサブフォームにフィルターを実行ます。

  Me!s_車両管理.Form.Filter = "車検月 = '" & Cmb車検月 & "'"
  Me.FilterOn = True
End Sub