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条件を追加することもできますので、上記コードをベースに、色々と試してみると面白いかもしれません。
さいごに
フィルターの設定はエクセルを使っていると、かなりの確率で出会う処理になります。
今回のサンプルコードを参考にしてみてください!
ではまた。