Excel VBA オートフィルタを操作するサンプル

Excel VBAのオートフィルタを操作するサンプルです。

目次

サンプル オートフィルタを設定する
  値を1つ指定して絞り込む
  値を2つ指定して絞り込む(配列)
  配列で変数を使用する
  年月を指定して絞り込む
  数値に条件を指定する
  絞り込みした表を別シートにコピーする
  オートフィルタの絞り込みを解除する
  行の最終行を取得する
  シートにオートフィルタが設定されているかを確認する

対象の表

上記の表に対してオートフィルタを設定/設定解除します。
1行目のセルの左下にある下向きの三角形の箇所がオートフィルタです。

A列の年月の値は、yyyy/mm/dd形式です。

表示形式を「日付」の2001年3月形式にしています。

 

オートフィルタを設定する

Sub test1()

    Range("A1").Select
    Selection.AutoFilter
        
End Sub

3行目は、A1を指定しています。
4行目は、AutoFilterでオートフィルタを設定しています。
オートフィルタが設定された状態で4行目が実行されるとオートフィルタが解除されます。

値を1つ指定して絞り込みする

Sub test1()

    ActiveSheet.Range("A1").AutoFilter Field:=2, Criteria1:="ノート"
    
    ActiveSheet.Range("A1").AutoFilter Field:=3, Criteria1:="A社"
        
End Sub

3行目は、商品列(Field:=2)でノートを指定しています。
その後に5行目で、メーカー名(Field:=3)でA社を指定しています。
2つの項目がand条件で絞られた状態になります。

値を2つ指定して絞り込みする(配列)

Sub test1()

    ActiveSheet.Range("A1").AutoFilter Field:=2, _
    Operator:=xlFilterValues, _
    Criteria1:=Array("ノート", "消しゴム")

End Sub

3,4行目は、商品列(Field:=2)の値のノートまたは消しゴムを指定しています。
Arrayは配列です。
配列の変数の場合、4行目のxlFilterValuesが必要です。

配列で変数を使用する

Sub test1()

    Dim arr(2) As String
    arr(0) = "ノート"
    arr(1) = "消しゴム"

    ActiveSheet.Range("A1").AutoFilter Field:=2, _
    Operator:=xlFilterValues, _
    Criteria1:=Array(arr)
        
End Sub

3~5行目は、配列です。
9行目は、配列を変数で指定しています。
配列の変数の場合、8行目のxlFilterValuesが必要です。

年月を指定して絞り込む

Sub test1()

    ActiveSheet.Range("A1").AutoFilter Field:=1, Criteria1:="2020年8月"
        
End Sub

3行目は、A列の年月(Field:=1)で絞り込んでいます。
セル内の値は、2020/8/3等入っていますが、表示されている2020年8月等の値で絞り込めます。

数値に条件を指定する

Sub test1()

    ActiveSheet.Range("A1").AutoFilter Field:=4, Criteria1:=">150"
        
End Sub

3行目は、D列の金額(Field:=4)が150より大きい数値という指定をしています。

絞り込みした表を別シートにコピーする

Sub test1()
        
    Range("A1").CurrentRegion.Copy Sheets("Sheet3").Range("A1")

End Sub

3行目は、オートフィルタで絞り込まれて表示されているデータのみ、別シートにコピーします。
以下のように表示されます。(sheet1で商品をノート、メーカー名をA社で絞って上記コードを実行)

オートフィルタの絞り込みを解除する

Sub test1()

    ActiveSheet.ShowAllData
  
End Sub

ShowAllDataでオートフィルタの絞り込みを解除します。

行の最終行を取得する

オートフィルタで絞り込まれていた場合、絞り込まれた状態の最終行を取得します。

Sub test1()
    Dim num As Integer
    
    num = ActiveSheet.Range("A1").End(xlDown).Row
    
    Debug.Print num
End Sub

シートにオートフィルタが設定されているかを確認する

Sub test1()

    Dim wkFilter As AutoFilter
    
    Set wkFilter = Sheets("Sheet1").AutoFilter
    
    If Not wkFilter Is Nothing Then
        Debug.Print "オートフィルタの設定あり"
    End If
    
End Sub

Sheet1にオートフィルタが設定されているか確認しています。
設定されている場合、8行目の文字列が出力されます。

関連の記事

オートフィルタの操作をマクロに記録してコードを確認できます。方法は以下を参照願います。

Excel マクロを記録して実行する方法

△上に戻る