Excel、VBAのAutoFilterメソッドでの複数条件の設定

Excelを表現した画像

Excel、VBAのAutoFilterメソッドでの複数条件の設定


指定した条件で絞り込む方法はいくつかありますが、もっともポピュラーなのがAutoFilterメソッドを使う方法です。

AutoFilterメソッドは、Excelのオートフィルター機能をVBAで制御するもので、ワークシート上のセルを、指定した条件に合致するセルのみに絞り込みます。
書式は下記のようになっています。


Rangeオブジェクト.AutoFilter Field:= フィールド番号, Criteria1:= 1つ目の条件値, Operator:= 条件の種類, Criteria2:= 2つ目の条件値


Rangeオブジェクトには、絞り込む対象となるデータが入った表を領域として指定します。
表のセル範囲全体を記述する必要はなく、表を形成する一部のセル1つを指定するだけで済ませることができます。


「.AutoFilter」の後ろにある引数「Field:=」に続く「フィールド番号」には、絞り込む基準となる列を整数で指定します。
表の左端の列から「1」として、絞り込む基準の列が数えて何列目かを値で指定します。

引数「Criteria1:= }にある「1つ目の条件値」には、絞り込む条件を比較演算子を使った数式などで指定します。
絞り込む条件が2つあるときは、引数「Criteria2:= 」にある「2つ目の条件値」に、絞り込む条件を比較演算子を使った数式などで指定します。

引数「Operator:= 」にある「条件の種類」には、2つの条件値をどのように組み合わせて絞り込むのかを指定します。
2つの条件が共に成立するのなら「xlAnd」、2つの条件のいずれかが成立するのなら「xlOr」となります。

AutoFilterメソッドのコードを、実例に合わせると下記のようになります。


Range(“B5”).AutoFilter Field:=5 _
 , Criteria1:= 1つ目の条件値 _
 , Operator:=xlAnd _
 , Criteria2:= 2つ目の条件値


上記は1行でコードを書かず、「_」を使って改行しています。

「Range(“B5”)」は、上記例の表の左上のセルです。
このセルを指定するだけで、表全体がAutoFilterメソッドを実行できる範囲となります。

引数「Field:= 」に続くフィールド番号には、数値の「5」を指定しています。
絞り込む基準となる日付データのF列が、表の左端から数えて5つ目の列となるからです。

引数「Operator:= 」に続く条件の種類には「xlAnd」を指定しています。
これにより、2つの条件が共に成立する条件で絞込みを実行することになります。


上記例に書いたコードにある「1つ目の条件値」と「2つ目の条件値」には、絞り込む条件を比較演算子を使った数式などで指定できます。
上記例では、ある日付からある日付までの期間を条件にしたいので、比較演算子を使い、1つ目から2つ目の条件値までの間を数式で指定します。

「1つ目の条件値」として使いたい期間の開始日はF2セルに入力されます。
また、「2つ目の条件値」として使いたい期間の終了日はF3セルに入力されます。
開始日の条件式は、「~以上」を意味する比較演算子「>=」と、F2セルに入力される日付を連結することで指定できます。
また、終了日は、「~以下」を意味する比較演算子「<=」と日付を連結することで指定できます。 「>=」と「<=」は文字列として直接指定し、&演算子でそれぞれF2セルとF3セルとを連結します。


“>=” & Range(“F2”).Value
“<=" & Rabge("F3").Value


たとえばF2セルに「2013/2/25」が入力されれば、「”>=” & Range(“F2″).Value」の結果は、「>=2013/2/25」という文字列となります。
「~以上」を意味する比較演算子「>=」を用いることで「2013年2月25日以降の日」という条件式を指定できるのです。

また、F3セルに「2013/2/28」が入力されれば、「”<=" & Range("F3").Value」は「<=2013/2/28」という文字列となります。 「~以下」を意味する比較演算子「<=」を用いることで「2013年2月28日以前の日」という条件式を指定できるのです。 この2つの条件式が、共に成立するように絞り込むため、「xlAnd」を指定します。 すると、「2013年2月25日から2013年2月28日までの期間」とできます。 ここまでの内容を実例コードにすると下記のようになります。


Range(“B5″).AutoFilter Field:=5 _
 , Criteria1:=”>=” & Range(“F2″).Value _
 , Operator:=xlAnd _
 , Criteria2=”<=" & Range("F3").Value


これで、F2セルとF3セルに入力される日付の期間を条件にして、オートフィルターで絞り込む処理を実行できます。


Leave a Reply