【VBA】AutoFilterメソッドの使い方

VBA

AutoFilterメソッドとは

AutoFilterメソッドは、Excelのシートにオートフィルタを適用したり、解除したりするためのメソッドです。これを使うことで、特定の条件に基づいてデータを絞り込むことができます。

エクセルのマクロを使わなくても 下記のようにフィルター機能を使うことは可能ですが VBAでフィルタ機能を使えば データ抽出を自動化できます

☆下のような表があるとき、”商品A”だけを抽出する

Sub フィルター例1()
    Range("A1").AutoFilter 2, "商品A"
End Sub

次のコードでも同じ処理ができます

Sub FilterExample1()
    ' テーブルの範囲を指定
    Dim rng As Range
    Set rng = Range("A1:E6")
    
    ' 商品名が「商品A」の行だけを表示
    rng.AutoFilter Field:=2, Criteria1:="商品A"
End Sub

★出力結果

フィルターを解除するコードも書いておきますね

Sub ClearFilter()
    ' テーブルの範囲を指定
    Dim rng As Range
    Set rng = Range("A1:E6")
    
    ' フィルターを解除
    rng.AutoFilter
End Sub

応用例 ① 商品Aの行の色を変更する

☆同じエクセルの表を使って フィルターを使って商品Aの行だけを水色に変更し、そのあとでそのフィルターを解除するコードです


Sub FilterAndColorExample()
    ' テーブルの範囲を指定
    Dim rng As Range
    Set rng = Range("A1:E6")
    
    ' 商品名が「商品A」の行だけを表示
    rng.AutoFilter Field:=2, Criteria1:="商品A"
    
    ' 商品Aの行だけに水色の色を付ける
    Dim cell As Range
    For Each cell In rng.SpecialCells(xlCellTypeVisible).Rows
        If cell.Cells(1, 2).Value = "商品A" Then
            cell.Interior.Color = RGB(173, 216, 230) ' 水色
        End If
    Next cell
    
    ' フィルターを解除
    rng.AutoFilter
End Sub

★出力結果

応用例 ② 異なる文字をみつける

☆下記のようにたくさんの「犬」の文字の中から1つだけ「犬」ではないものを見つけるようなこともVBAを使えば すぐに出来てしまいます

エクセルのシート内で「犬」ではないセルを見つけて、そのセルを赤色でハイライトするものです

Sub 間違い探し()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' フィルターを適用(1行目はタイトルとして除外)
    ws.Range("A2:E6").AutoFilter Field:=4, Criteria1:="<>犬"
    
    ' フィルターされたセルをハイライト
    Dim cell As Range
    For Each cell In ws.Range("A2:E6").SpecialCells(xlCellTypeVisible)
        If cell.Value <> "犬" Then
            cell.Interior.Color = RGB(255, 0, 0) ' 赤色でハイライト
        End If
    Next cell
    
    ' フィルターを解除
    ws.AutoFilterMode = False
End Sub

★出力結果

まとめ

AutoFilterメソッドの基本的な使い方と、具体的な応用例について説明しました。

AutoFilterメソッドは 膨大なデータを扱う際にも データ分析などを効率的に行うのに役にたつと思います

    コメント

    タイトルとURLをコピーしました