【VBA】オートフィルター(AutoFilter)の使い方|サンプルコード多数

ExcelのVBAを使って、データのフィルタリングを効率よく行いたいと思いませんか?この記事では、VBAで使用するオートフィルター(AutoFilter)の使い方について、基本的な操作から応用テクニックまで、詳細にわたって解説します。参考にしたURLの情報を完全に網羅し、さらにそれを上回る情報量とオリジナルのサンプルコードを提供します。

目次

オートフィルターとは?

オートフィルターは、Excelのデータベース機能の一つであり、特に大量のデータを効率よく処理する際に非常に役立つ機能です。VBA(Visual Basic for Applications)を使えば、このオートフィルターをプログラムから操作することができます。

主な操作方法

  1. Range.AutoFilter メソッド
  2. ワークシートの AutoFilterMode プロパティ
  3. AutoFilter オブジェクト

これらの操作方法を組み合わせることで、非常に柔軟なデータフィルタリングが可能になります。

Range.AutoFilterメソッドの詳細

Range.AutoFilter メソッドは、指定したセル範囲にオートフィルターを適用、または解除するためのメソッドです。

引数とその説明

引数説明
Fieldフィルタリングする列の番号です。1から始まります。
Criteria1第一の条件です。この条件にマッチするデータだけが表示されます。
Operator操作の種類です。例えば、xlFilterValuesなどがあります。
Criteria2第二の条件です(オプション)。OperatorでANDやORを指定した場合に使用。
VisibleDropDownドロップダウンの矢印を表示するかどうか(オプション)。

基本的な使用例

Sub ApplyBasicAutoFilter()
    ' A列に「1」という値が含まれる行だけを表示
    Range("A1").AutoFilter Field:=1, Criteria1:="1"
End Sub

処理の流れ

  1. Range("A1")で、フィルタリングを開始するセル(A1)を指定します。
  2. AutoFilter メソッドを呼び出し、フィルタリングを適用します。
  3. Field:=1で、フィルタリングする列(A列)を指定します。
  4. Criteria1:="1"で、表示するデータの条件(この場合は「1」)を指定します。

複数条件での使用例

Sub ApplyMultipleCriteriaAutoFilter()
    ' A列に「1」または「2」という値が含まれる行だけを表示
    Range("A1").AutoFilter Field:=1, Criteria1:=Array("1", "2"), Operator:=xlFilterValues
End Sub

処理の流れ

  1. Range("A1")で、フィルタリングを開始するセル(A1)を指定します。
  2. AutoFilter メソッドを呼び出し、フィルタリングを適用します。
  3. Field:=1で、フィルタリングする列(A列)を指定します。
  4. Criteria1:=Array("1", "2")で、表示するデータの条件(この場合は「1」または「2」)を指定します。
  5. Operator:=xlFilterValuesで、複数の値によるフィルタリングを行うことを指定します。

AutoFilterModeプロパティの詳細

AutoFilterMode プロパティは、ワークシート全体に対してオートフィルターが適用されているかどうかを制御するプロパティです。

設定値とその説明

説明
Trueオートフィルターを適用する
Falseオートフィルターを解除する

使用例

Sub ToggleAutoFilterMode()
    ' オートフィルターの状態をトグルする
    With Sheets("Sheet1")
        If .AutoFilterMode Then
            .AutoFilterMode = False
        Else
            .Range("A1").AutoFilter
        End If
    End With
End Sub

処理の流れ

  1. With Sheets("Sheet1")で、操作するワークシート(Sheet1)を指定します。
  2. If .AutoFilterMode Thenで、オートフィルターが既に有効かどうかを確認します。
    • 有効であれば、次のステップに進みます。
    • 無効であれば、ステップ4に進みます。
  3. .AutoFilterMode = Falseで、オートフィルターを無効に(オフに)します。処理を終了します。
  4. .Range("A1").AutoFilterで、A1セルを起点としてオートフィルターを有効に(オンに)します。

AutoFilterオブジェクトの詳細

AutoFilter オブジェクトを使うと、より高度なフィルタリングが可能です。このオブジェクトを通じて、複雑な条件でのフィルタリングや、特定の列だけにフィルタを適用するなど、多くの操作ができます。

使用例:特定の列にフィルタを適用

Sub ApplyColumnSpecificFilter()
    ' A列に「1」という値が含まれる行だけを表示
    Sheets("Sheet1").Range("A1").AutoFilter Field:=1, Criteria1:="1"
End Sub

処理の流れ

  1. Sheets("Sheet1")で、操作するワークシート(Sheet1)を指定します。
  2. Range("A1")で、フィルタリングを適用する列(A列)を指定します。
  3. AutoFilter Field:=1, Criteria1:="1"で、A列に「1」という値が含まれる行だけを表示します。

使用例:フィルタリングしたデータをコピー

Sub CopyFilteredData()
    With Sheets("Sheet1")
        .Range("A1").AutoFilter Field:=1, Criteria1:="1"
        .Range("A1").CurrentRegion.Copy
        Sheets("Sheet2").Range("A1").PasteSpecial Paste:=xlPasteValues
        .AutoFilterMode = False
    End With
    Application.CutCopyMode = False
End Sub

処理の流れ

  1. With Sheets("Sheet1")で、操作するワークシート(Sheet1)を指定します。
  2. .Range("A1").AutoFilter Field:=1, Criteria1:="1"で、A列に「1」という値が含まれる行だけを表示します。
  3. .Range("A1").CurrentRegion.Copyで、フィルタリングされた範囲をコピーします。
  4. Sheets("Sheet2").Range("A1").PasteSpecial Paste:=xlPasteValuesで、Sheet2のA1セルにコピーしたデータを貼り付けます。
  5. .AutoFilterMode = Falseで、オートフィルターを解除します。
  6. Application.CutCopyMode = Falseで、コピー状態を解除します。

AutoFilterに関するFAQ

Q:オートフィルターとは何ですか?

A:オートフィルターはExcelの機能の一つで、特定の条件に基づいてデータをフィルタリングすることができます。VBAを使用すると、このフィルタリングをプログラムからも制御することが可能です。

Q:Range.AutoFilterメソッドの基本的な使い方は?

A:Range.AutoFilter メソッドを使用すると、指定したセル範囲にオートフィルターを適用することができます。基本的な形式は Range("A1").AutoFilter Field:=1, Criteria1:="条件" です。

Q:複数の条件でフィルタリングする方法は?

A:Criteria1OperatorCriteria2 を組み合わせて使用することで、複数の条件でのフィルタリングが可能です。例えば、Operator:=xlAnd と設定すると、Criteria1Criteria2 の両方にマッチするデータがフィルタリングされます。

Q:オートフィルターを解除する方法は?

A:AutoFilterMode プロパティを False に設定することで、オートフィルターを解除できます。具体的には、Sheets("Sheet1").AutoFilterMode = False のように記述します。

Q:特定の列だけにフィルタを適用するには?

A:AutoFilter.Range.Columns(列番号) を使用して、特定の列だけにフィルタを適用することができます。例:Sheets("Sheet1").AutoFilter.Range.Columns(1).AutoFilter Field:=1, Criteria1:="1"

Q:フィルタリングしたデータを別のシートにコピーする方法は?

A:Range.Copy メソッドと Range.PasteSpecial メソッドを使用して、フィルタリングしたデータを別のシートにコピーできます。具体的なコード例は、Range("A1").CurrentRegion.CopySheets("Sheet2").Range("A1").PasteSpecial Paste:=xlPasteValues です。

Q:オートフィルターの状態を確認する方法は?

A:AutoFilterMode プロパティを参照することで、オートフィルターが適用されているかどうかを確認できます。If Sheets("Sheet1").AutoFilterMode Then のように使用します。

Q:オートフィルターで日付データをフィルタリングするには?

A:日付データをフィルタリングする場合、Criteria1 に日付を # で囲んで指定します。例:Criteria1:="#2022/01/01#"

関連動画

まとめ

この記事で解説した内容をしっかりと理解し、実践することで、VBAを使ったデータのフィルタリングが格段に効率的になります。何か疑問点や不明点があれば、どうぞお気軽にお問い合わせください。この記事が皆様のExcel作業の一助となれば幸いです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次