VBA オートフィルタ
In this Article
VBAでは、Excelのオートフィルタを使用して、セル範囲やExcelの表をフィルタリングすることができます。
注:VBAで高度なフィルタを使用する方法を知りたい場合は、ここをクリックしてください: VBAの高度なフィルタ
VBAでオートフィルタを作成する
まず、ユーザーがデータにフィルタをかけることができるように、範囲にオートフィルタをかける方法を紹介します。例で使用するデータは画像1です。
以下は、オートフィルタを作成するためのコードです。
Sheet1.Range("A1:E1").AutoFilter
AutoFilterを有効にするには、範囲のヘッダー(この場合はA1:E1)を指定し、RangeオブジェクトのAutoFilterメソッドを使用する必要があります。その結果、このデータ範囲ではフィルタが有効になりました。
画像2.オートフィルタが有効なデータ
FieldとCriteriaパラメータを使ったオートフィルタ
VBAでは、特定のフィールドを特定の値で自動的にフィルタリングすることも可能です。 これを行うには、パラメータ Fieldと Criteria1を使用します。この例では、3番目の列(製品)を製品Aのみにフィルタリングしたいと思います。以下はそのコードです。
Sheet1.Range("A1:E1").AutoFilter Field:=3, _
Criteria1:="Product A"
Fieldパラメータには、範囲内の列の番号を設定し(Excelにはない)、Criteria1にはフィルタリングしたい値を入れます。このコードを実行すると、テーブルは次のようになります。
画像3.フィールドと条件を含むオートフィルタ
このように、3列目に製品Aを含む行だけがデータ範囲に表示されます。
Fieldと複数のCriteriaを使ったオートフィルタ
1つのフィールドを複数の値でフィルタリングしたい場合は、オートフィルタメソッドのパラメータOperatorを使用します。複数の値をフィルタリングするには、OperatorをxlFilterValues に設定し、Criteriaのすべての値を 配列に入れておく必要があります。この例では、Product列をProduct AとProduct Bでフィルタリングします。
Sheet1.Range("A1:E1").AutoFilter Field:=3, _
Criteria1:=Array("Product A", "Product B"), _
Operator:=xlFilterValues
このコードを実行すると、画像4に示すように、商品Aと商品Bを含む行だけが取得されます。
画像4.複数の基準値を持つオートフィルタ
複数のCriteriaによるデータ範囲のオートフィルタ
複数の基準でフィールドをフィルタリングする場合、Criteria1とCriteria2パラメータだけでなく、xlAnd 演算子も使用する必要があります。 次の例では、2018年12月の日付について、最初の列(Date)をフィルタリングすることにします。したがって、18年12月1日より大きい日付と18年12月31日より小さい日付という2つの基準を用意します。これがそのコードです。
Sheet1.Range("A1:E1").AutoFilter Field:=1, _
Criteria1:=">=12/01/2018", _
Operator:=xlAnd, _
Criteria2:="<=12/31/2018"
コードを実行すると、データ範囲に12月の日付だけが表示されていることがわかります。
画像5.フィールドに複数の基準値を持つオートフィルタ
AutoFilterメソッドのOperatorパラメータ値
次の表は、AutoFilterメソッドのOperator パラメータに指定できるすべての値とその説明を示しています。
Operator | 説明 |
xlAnd | 条件1および条件2のいずれも含む |
xlOr | 基準1または基準2のいずれかを含む |
xlTop10Items | 上から順番に一定数(Criteria1で指定した数)をフィルタする |
xlBottom10Items | 下から順番に一定数(Criteria1で指定した数)をフィルタする |
xlTop10Percent | 上から順番に一定割合(Criteria1で指定した%)をフィルタする |
xlBottom10Percent | 下から順番に一定割合(Criteria1で指定した%)をフィルタする |
xlFilterValues | 配列に入っている複数の基準値を含む |
xlFilterCellColor | セルの背景色でフィルタする |
xlFilterFontColor | フォントの色でセルをフィルタする |
xlFIlterIcon | アイコンをフィルタする |
xlFilterDynamic | 動的な値をフィルタする |