スポンサードリンク

ExcelVBA
ExcelVBA

データを指定した値でフィルタをかけたいことがあります。

オートフィルタをかける時の設定でいろいろ苦戦したので

やり方を覚書で残しておきます。

スポンサードリンク

オートフィルタのかけ方

1つのオートフィルタのかけ方

VBAオートフィルタ サンプル
VBAオートフィルタ サンプル

オートフィルタをかけるときは下記のように書きます。

Range(セル番地).AutoFilter Field:=フィルタをかける列, Criteria1:=フィルタをかける値

『Range』に指定する【セル番地】は表全体ではなく、表内のセルを1つだけ指定します。

オートフィルタが【A1】から始まる表ならば【Range(“A1”)】を指定します。

『Field』はフィルタをかけたい列番号を指定します。

ここでの列番号はオートフィルタをかける表での列番号です。

『Criteria1』はフィルタをかけたい値を指定します。

例えば、【B2】から始まる表で「C列」で『東京』という文字でフィルタをかける場合は

下記のように書きます。

Range("B2").AutoFilter Field:=2, Criteria1:="東京都"

ちなみに、『Range』は『Rows』でもフィルタをかけられます。

『Rows』の場合は下記のように書きます。

Rows(2).AutoFilter Field:=2, Criteria1:="東京都"
VBAオートフィルタ フィルタかけた後
VBAオートフィルタ フィルタかけた後

実行すると上記のように『東京』でフィルタがかけられます。

2つの項目以上のオートフィルタのかけ方

VBAオートフィルタ 2つのフィルタかけた後
VBAオートフィルタ 2つのフィルタかけた後

オートフィルタは基本的に1つの項目しかかけられません。

そのため、2つの項目にオートフィルタをかける場合は

『With』ステートメントを使って指定をします。

例えば、【B2】から始まる表で「C列」で『東京』、「E列」で『男』という文字でフィルタをかける場合は

下記のように書きます。

With Range("B2")
    .AutoFilter Field:=2, Criteria1:="東京都"
    .AutoFilter Field:=4, Criteria1:="男"
End With

ちなみに、『With』ステートメントを使わなくても

オートフィルタを2回起動しても同じ結果ができます。

Range("B2").AutoFilter Field:=2, Criteria1:="東京都"
Range("B2").AutoFilter Field:=4, Criteria1:="男"

『With』ステートメントの使い方で迷ったら

こちらでもいいかもしれません。

複数条件のオートフィルタのかけ方

VBAオートフィルタ 複数の条件でフィルタかけた後
VBAオートフィルタ 複数の条件でフィルタかけた後

同じ列にあるもので、複数の条件でオートフィルタをかける場合も

条件指定すればできます。

例えば、【B2】から始まる表で「C列」で『東京』、『神奈川』という文字でフィルタをかける場合は

下記のように書きます。

Range("B2").AutoFilter Field:=2, Criteria1:="東京都", Operator:=xlOr, Criteria2:="神奈川県"

【Operator:=xlOr】は抽出条件での指定を指示しています。

他にも、配列を使ってオートフィルタもかけられます。

Range("B2").AutoFilter Field:=2, Criteria1:=Array("東京都", "神奈川県"), Operator:=xlFilterValues

【Operator:=xlFilterValues】はフィルタの値を指定しています。

配列の場合はこれを指定しないと最後の配列の値のみでオートフィルタがかかってしまいます。

今回のケースですと、『神奈川県』のみでフィルタがかかってしまいます。

VBAオートフィルタ 複数のフィルタで失敗例
VBAオートフィルタ 複数のフィルタで失敗例

オートフィルタの解除の仕方

VBAオートフィルタ 解除後
VBAオートフィルタ 解除後

オートフィルタの作業が終わったら

オートフィルタを解除しておくといいです。

解除の仕方は2つあります。

1つはフィルタそのものを解除するやり方で、

下記のように書きます。

Range("B2").AutoFilter

【AutoFilter】メソッドで引数をなしで実行すればフィルタが解除されます。

VBAオートフィルタ 絞り込み解除
VBAオートフィルタ 絞り込み解除

もう1つは、フィルタの絞り込みを解除する方法です。

フィルタの絞り込みを解除する方法は下記のように書きます。

Activesheet.ShowAllData

これでオートフィルタの絞り込みは解除されます。

VBAでのオートフィルタの使い方のまとめ

ExcelVBA
ExcelVBA

オートフィルタの指定で、エラーが出る場合は

ワークシートオブジェクトを指定しないといけない場合があります。

その際はRangeオブジェクトの前にワークシートオブジェクトを指定してください。

以下の記事を参考にして下さい。
【参考】
(Excel VBA)RangeプロパティでCellsやRows、Columnsを組み合わせて使うと「実行時エラー 1004」が出る時の対処法

(Excel VBA)変数を使う時のCells、Rows、Columnsを使ったRangeでのセル指定方法

オートフィルタを使うと、条件で絞りこんだ内容で

ループ処理することができます。

次回はオートフィルタを使ったループ処理を書く予定です。

スポンサードリンク