Autofilterを使えば自動でフィルタリングをかけることができます。
整理してデータを見やすくできたり、コピペするときにも便利です。
Autofilter
Autofilterの使い方
このようにデータが並んでいるとします。
A列に入っているサンプル名でフィルターをかけてみましょう。
Sub test()
Columns(1).AutoFilter field:=1, Criteria1:="A"
End Sub
こんな感じで”A”だけ残っていれば成功です。
フィルターをかけたい範囲(実行範囲)を指定し、Autofilterと書きましょう。
大文字小文字は区別しない
Autofilterは大文字と小文字を区別しません。
例えば、A列に”sampleA”と”SampleA”があるとします。
Sub test()
Columns(1).AutoFilter field:=1, Criteria1:="sampleA"
End Sub
引数Criteria1を”sampleA”にして実行すると、どちらも表示されているはずです。
つまりAutofilterでは大文字小文字は区別されないってことですね。
2つのデータを表示する方法
複数のデータを表示したい場合は、引数OperatorとCriteria2を設定します。
例えば「”A”または”B”を表示したい」なら以下の通りです。
Sub test()
Columns(1).AutoFilter field:=1, Operator:=xlOr, Criteria1:="A", Criteria2:="B"
End Sub
“A”も”B”も表示されていますね。
3つ以上のデータを表示する方法
3つ以上のデータを表示させたいなら配列を使います。
配列とは、簡単に言うとデータが入っているリストのことです。
例えば、”A”,”B”,”C”が表示されるようにフィルターをかけたいとします。
Sub test()
Dim myArray(2) As String
myArray(0) = "A"
myArray(1) = "B"
myArray(2) = "C"
Columns(1).AutoFilter field:=1, Criteria1:=myArray, Operator:=xlFilterValues
End Sub
まず、配列myArrayを作成して”A”,”B”,”C”を入れましょう。
次に、引数Criteria1に作成した配列を渡して、OperatorはxlFilterValuesにすればOKです。
myArray(3)=”D”を追加すれば、”D”も表示されます。
複数列を対象に絞り込む方法
複数の列を参照してフィルターする方法です。
サンプル名に”A”と”B”、そして条件に”C”と”D”があるとします。
サンプル名が”A”で条件が”C”であるデータのみを表示させましょう。
Sub test()
Range(Columns(1), Columns(2)).AutoFilter field:=1, Criteria1:="A"
Range(Columns(1), Columns(2)).AutoFilter field:=2, Criteria1:="C"
End Sub
フィルターする範囲を1,2列にして、fieldで絞り込む対象を決めます。
例えば、A列は実行範囲における1列目なので、field := 1に対応します。
”A”と”C”を表示したいので、field := 1が”A”で、2が”C”です。
実行すると以下の通り。
ちなみにWithでコードをまとめるとスッキリ書けます。
Sub test()
With Range(Columns(1), Columns(2))
.AutoFilter field:=1, Criteria1:="A"
.AutoFilter field:=2, Criteria1:="C"
End With
End Sub
With~End Withまでの間では、” . “から始めたコードは”Range(Columns(1), Columns(2))”の続きとして認識されます。
▼ボタンを非表示にする方法
フィルターマークの▼を表示したくないなら、visibledropdownをFalseにしましょう。
Sub test()
Columns(1).AutoFilter field:=1, Criteria1:="sampleA", visibledropdown:=False
End Sub
この方が見た目がスッキリしますが、手動でフィルターを操作できなくなるので注意してください。
まとめ
今回はフィルターによるデータの絞り込みを自動化してみました。
報告用資料作成やデータ集計で役に立つのでぜひ使ってみてください。
コメント