Excelの操作を自動化していると、フィルターを設定したり、解除したり、、ということがコーディングをしているとよくあります。

フィルターの設定にもいろいろと種類がありますが、いつも使っているサンプルコードをまとめました。これを使うだけでめちゃめちゃ楽になるはずなので、ご一読ください!

 

フィルターの絞り込みを「クリア」するコード

シート名にはフィルターを設定したいデータが入力されているシート名を入力します。

オートフィルターが設定されていて、かつ、絞り込まれている場合にフィルターをクリアします。

過去、シート内でフィルターを設定したときにそのまま保存してしまった。という場合に以下のコードでいったんクリアしてから処理を始めると非常に効率的です。

Sub フィルタークリア()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("シート名")

    ' もしフィルターが設定されていればフィルターをクリアする
    If ws.AutoFilterMode = True And ws.FilterMode = True Then
        ws.ShowAllData
    End If
End Sub

 

フィルターの設定自体を「解除」するコード

Sub フィルター解除()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("シート名")

    ' オートフィルターが設定されている場合に解除する
    If ws.AutoFilterMode = True Then
        ws.Range("A1").AutoFilter
    End If
End Sub

オートフィルターが設定されている場合にその設定ごと解除してしまいます。セル「A1」を指定していますが、ここはフィルターが設定されているセル番地を指定する必要がありません。A1~G1にフィルターが設定されている場合でも「A2」と指定しても正常に動作します(ただ、データが入っていないセルを指定した際にエラーとなる可能性があるため、ヘッダーのセルを指定することをおすすめします。(詳細は割愛します))

 

フィルターを「絞り込み」を行うコード

フィルターの設定方法ですが、以下のコードだけで充分です。セルの指定は上述と同じ条件になります。(ヘッダーを指定した方が無難です。)

Sub フィルター設定()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("シート名")
       
    'オートフィルタ絞込処理
    ws.Range("A1").AutoFilter Field:=2, Criteria1:="*智*"
    ws.Range("A1").AutoFilter Field:=3, Criteria1:="赤"

End Sub

 

これだけだとちょっと分かりにくいので、実行前後の画像を掲載します。

実行前
実行後

パラメータに「”*智*”」が選択されているため、名前に智が入っているメンバーを取得することができます。アスタリスクを前後に付加すれば、部分一致ですね。(後方だけだと、前方一致です「”中居*”」→中居で始まる名前を抽出できる!)

対象は大野くんと長瀬くんですが、メンバーカラーの赤でさらにフィルターを設定しているというサンプルコードになります。(長瀬くん退社しちゃったけど、鉄腕DASH出ないのかな…)

 

ここで一つ補足です。OR条件を利用したいというケースもあると思いますが、以下のように記載すればOKです。

' OR条件は[Operator]で結合する
ws.Range("A1").AutoFilter Field:=2, Criteria1:="*智*", Operator:=xlOr, Criteria2:="中居*"

 

もっとコードを短くしたい場合、オプション名を省略することもできます。

' 以下のコードの挙動は同じ
ws.Range("A1").AutoFilter 2, "*智*", xlOr, "中居"

OR条件を追加することもできますので、上記コードをベースに、色々と試してみると面白いかもしれません。

 

さいごに

フィルターの設定はエクセルを使っていると、かなりの確率で出会う処理になります。

 

今回のサンプルコードを参考にしてみてください!

 

ではまた。