VBAのAutoFilterメソッドは、Excelのデータをフィルタリングするための強力なツールです。このメソッドを使用することで、Excelシート上のデータを簡単に抽出し、必要な情報だけを表示することができます。
AutoFilterメソッドの基本的な使い方は、以下のようになります。
1 |
ActiveSheet.Range("A1:D10").AutoFilter Field:=1, Criteria1:="Apples" |
このコードは、”A1:D10″範囲のデータをフィルタリングし、1列目に”Apples”という値が含まれている行のみを表示します。
ここでは、AutoFilterメソッドの詳細な使い方を解説します。
AutoFilterメソッドの構文
AutoFilterメソッドの構文は以下の通りです。
1 |
expression.AutoFilter(Field, Criteria1, Operator, Criteria2, VisibleDropDown) |
- expression:必須。フィルタを適用する範囲を指定します。
- Field:必須。フィルタを適用する列番号を指定します。1から始まります。
- Criteria1:オプション。フィルタ条件を指定します。
- Operator:オプション。フィルタ条件の演算子を指定します。
- Criteria2:オプション。二重条件フィルタの場合、2つ目の条件を指定します。
- VisibleDropDown:オプション。TrueまたはFalseを指定し、ドロップダウンリストを表示するかどうかを指定します。
基本的なフィルタリング
最も基本的なフィルタリングは、上記の例のように、指定した列に特定の値が含まれている行を抽出する方法です。AutoFilterメソッドの引数には、フィルタを適用する範囲を指定することができます。
1 |
ActiveSheet.Range("A1:D10").AutoFilter Field:=1, Criteria1:="Apples" |
複数のフィルタ条件を使用する
AutoFilterメソッドを使用して、複数のフィルタ条件を指定することもできます。例えば、以下のコードは、1列目に”Apples”という値が含まれ、2列目に”Red”という値が含まれている行のみを表示します。
1 2 |
ActiveSheet.Range("A1:D10").AutoFilter Field:=1, Criteria1:="Apples" ActiveSheet.Range("A1:D10").AutoFilter Field:=2, Criteria1:="Red" |
演算子を使用したフィルタリング
AutoFilterメソッドを使用して、演算子を使用したフィルタリングを行うこともできます。以下は演算子を使用したフィルタリングの例です。
1 |
ActiveSheet.Range("A1:D10").AutoFilter Field:=2, Criteria1:=">5", Operator:=xlAnd, Criteria2:="<10" |
この例では、2列目の値が5より大きくかつ10より小さい行のみを表示します。Criteria1に”>5″を指定して、5より大きい値を含む行を選択し、Criteria2に”<10″を指定して、10より小さい値を含む行を選択します。そして、Operatorに”xlAnd”を指定して、2つの条件をAND演算子で結合します。
AutoFilterメソッドでは、以下のような演算子を使用することができます。
- xlAnd:AND演算子
- xlOr:OR演算子
- xlFilterValues:指定された値のいずれかに一致する行を表示します。
また、以下のような比較演算子も使用できます。
- “=”:等しい
- “<>”:等しくない
- “>”:より大きい
- “>=”:以上
- “<“:より小さい
- “<=”:以下
フィルタリングされたデータのコピー
AutoFilterメソッドを使用して、フィルタリングされたデータを別の場所にコピーすることもできます。以下は、フィルタリングされたデータを”Sheet2″にコピーする例です
1 2 |
ActiveSheet.Range("A1:D10").AutoFilter Field:=1, Criteria1:="Apples" ActiveSheet.Range("A1:D10").SpecialCells(xlCellTypeVisible).Copy Destination:=Sheets("Sheet2").Range("A1") |
この例では、フィルタリングされたデータをSpecialCells
メソッドを使用して取得し、Copy
メソッドを使用して”Sheet2″にコピーします。SpecialCells(xlCellTypeVisible)
は、フィルタリングされたセルのみを選択するために使用されます。
サンプルコード
AutoFilterメソッドを使用したサンプルコードを以下に示します。このコードは、複数の条件でフィルタリングを行い、結果を配列に格納する方法を示しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
Sub AdvancedFilter() Dim ws As Worksheet Dim lastRow As Long, i As Long, j As Long Dim dataRange As Range, filteredData As Range Dim filterCriteria As Variant, filteredArray() As Variant Set ws = ActiveSheet ' データ範囲を設定 lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row Set dataRange = ws.Range("A1:D" & lastRow) ' フィルター条件を設定 filterCriteria = Array( _ Array(1, ">100"), _ Array(3, "Red"), _ Array(4, "<>N/A")) ' フィルター実行 dataRange.AutoFilter Field:=filterCriteria(0)(0), Criteria1:=filterCriteria(0)(1), Operator:=xlAnd For i = 1 To UBound(filterCriteria) dataRange.AutoFilter Field:=filterCriteria(i)(0), Criteria1:=filterCriteria(i)(1), Operator:=xlAnd Next i ' フィルター結果を配列にコピー Set filteredData = dataRange.Offset(1, 0).SpecialCells(xlCellTypeVisible) filteredArray = filteredData.Value ' フィルター解除 dataRange.AutoFilter ' 配列のデータを出力 For i = 1 To UBound(filteredArray, 1) For j = 1 To UBound(filteredArray, 2) Debug.Print filteredArray(i, j) Next j Next i End Sub |
上級者向けのAutoFilterメソッドを使用したサンプルコードを以下に示します。このコードは、複数の条件でフィルタリングを行い、結果を配列に格納する方法を示しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
vbCopy code<code>Sub AdvancedFilter() Dim ws As Worksheet Dim lastRow As Long, i As Long, j As Long Dim dataRange As Range, filteredData As Range Dim filterCriteria As Variant, filteredArray() As Variant Set ws = ActiveSheet ' データ範囲を設定 lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row Set dataRange = ws.Range("A1:D" & lastRow) ' フィルター条件を設定 filterCriteria = Array( _ Array(1, ">100"), _ Array(3, "Red"), _ Array(4, "<>N/A")) ' フィルター実行 dataRange.AutoFilter Field:=filterCriteria(0)(0), Criteria1:=filterCriteria(0)(1), Operator:=xlAnd For i = 1 To UBound(filterCriteria) dataRange.AutoFilter Field:=filterCriteria(i)(0), Criteria1:=filterCriteria(i)(1), Operator:=xlAnd Next i ' フィルター結果を配列にコピー Set filteredData = dataRange.Offset(1, 0).SpecialCells(xlCellTypeVisible) filteredArray = filteredData.Value ' フィルター解除 dataRange.AutoFilter ' 配列のデータを出力 For i = 1 To UBound(filteredArray, 1) For j = 1 To UBound(filteredArray, 2) Debug.Print filteredArray(i, j) Next j Next i End Sub |
このコードでは、以下のような処理を行っています。
- データ範囲を設定し、フィルター条件を設定します。
- フィルタリングを行い、結果を配列に格納します。
- フィルタリングを解除し、配列のデータを出力します。
このコードでは、Array関数を使用してフィルター条件を設定しています。また、For文を使用して、複数の条件でフィルタリングを行っています。配列にフィルター結果を格納することで、複数の条件でフィルタリングを行った場合にも効率的にデータを取得できます。さらに、Debug.Print文を使用して配列のデータを出力しています。
コメント