ACCESS VBA Filterプロパティの使い方

Filterプロパティの使い方

ACCESS VBAでレコードを思い通りに抽出したい。

そう思ったことはありませんか。
そんな時に使用するのが、Filterプロパティです。

プロパティって何?と思われるかも多いかもしれませんが、使いこなすことができれば非常に便利です。

今回はFilterプロパティの使い方をご紹介します。


こんにちは。
はこにわガジェット (@hakoniwagadget) です。

ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは基本機能だけでも十分便利ですが、VBAを使うことで格段に使いやすいデータベースを作成可能です。
この記事ではACCESSでのVBAの使い方をご紹介していきます。

Filterプロパティとは

Filterプロパティとは、フォーム、レポート、クエリ、テーブルなどのオブジェクトに対して、指定した条件でレコードの抽出を行うことができる機能です。

もっともよく使用するのはフォームに対してです。

現在開いているフォームに対して、以下のように使用して表示するレコードを抽出します。


 Me.Filter = " 抽出条件 "
 Me.FiliterOn = True

一行目で、Me(つまり現在のフォーム)のFilterプロパティに指定の抽出条件をセットします。

そのうえで、二行目でFilterOnをTrueにしてフィルターを実行します。

使用例

いくつか使用例を示します。

完全一致

最初は完全一致での抽出です。

例えば顧客名を指定して抽出すると以下になります。


  Me.Filter = "顧客名 = '株式会社ココナラ'"
  Me.FiliterOn = True

顧客名というフィールドに対して、値を指定して抽出しています。

ここで、”(ダブルクォーテーション)でくくられた中にさらに’(シングルクォーテーション)を使っている点に注意ください。

顧客名に指定した値はテキストデータですので、テキストであることを表すために’(シングルクォーテーション)を使用しています。

通常はテキストデータであることを示すのは”(ダブルクォーテーション)なのですが、Filter文そのものがテキストデータであることを示すために最初に”(ダブルクォーテーション)を使用しているため、その中でさらにテキストデータを指定する際は’(シングルクォーテーション)を使用します。

部分一致

次に部分一致です。あいまい検索とも言いますね。

これは、抽出条件の一部が合致するレコードを抽出する方法です。

顧客名に「株式会社」という文字が入っているレコードのみを抽出してみましょう。

Filter条件は以下のように設定します。


  Me.Filter = "顧客名 Like '*株式会社*'"
  Me.FiliterOn = True

顧客名の後ろが「=」ではなく「Like」になっていますね。

これが部分一致時の記載方法です。

また、「株式会社」の前後に*(アスタリスク)がついています。

アスタリスクはワイルドカードと言って、任意の文字を表しています。

ですので、この条件ですと前後に何らかの文字があっても、どこかに「株式会社」という文字が入っているレコードが抽出されるのです。

このアスタリスクはもちろん、前後片方だけに使うことも可能です。

例えば、前株の会社だけを抽出したいのであれば


  Me.Filter = "顧客名 Like '株式会社*'"
  Me.FiliterOn = True

と記載することで、顧客名が「株式会社」から始まるレコードのみを抽出できます。

Filterプロパティを使ったフォームの開発例

実際のFilterプロパティの使用例を見てみましょう。

検索用のフォームを作成する際にFilterプロパティを使用します。
今回は顧客検索フォームを作成してみましょう。

まずは顧客テーブルを用意します。

そして、このテーブルを基にしたフォームを作成します。
検索用のフォームですので、表形式にしておきます。

フォームをデザインビューで見るとこんな感じです。

上段のヘッダーセクションに、検索条件(今回は顧客名検索)を入力するための非連結テキストボックスを作成します。

詳細セクションはMST_顧客テーブルを基に、表示するフィールドを絞ったテキストボックスを配置しています。

検索を実行するために配置したのが検索ボタンです。
この検索ボタンにクリック時イベントを設定します。

VBAでクリック時に設定した検索用のイベントプロシージャは下記のとおりです。
フォームに対するFilterプロパティを使って検索を行っています。


Private Sub 検索_ボタン_Click()

  Dim filter_txt As String

    filter_txt = ""

    '顧客名
    If Me!顧客名検索 <> "" Then
       
        filter_txt = "顧客名 like '*" & Me!顧客名検索 & "*'"
             
    End If

    '削除
    If Me!削除検索 = False Then
       
       If filter_txt = "" Then
       
        filter_txt = "削除 = false"
       
       Else
         
        filter_txt = filter_txt & " and 削除 = false"
    
       End If
        
    End If
    
    If filter_txt = "" Then

        Me.FilterOn = False

    Else

        Me.Filter = filter_txt
        Me.FilterOn = True
        Me.OrderBy = "顧客名ふりがな ASC"
        Me.OrderByOn = True

    End If
    
End Sub

filter_txtというテキスト型の変数を設定し、この変数に抽出条件を格納しています。

抽出条件はフォームに設置した顧客名検索の入力値と、削除データを検索条件に含むか否かのチェックボックスの状態から作成しています。

そして、filter_txtに抽出条件を格納した後に、

Me.Filter = filter_txt
Me.FilterOn = True

でフォームにフィルターを適用しているのです。

このように、filterプロパティを使用すると自由自在に検索ができる検索フォームを作成できます。

以上、Filterプロパティの使い方をご紹介しました。


ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。

そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。

ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

サービス一覧

最後までお読みいただき、ありがとうございました。