Excel VBAでAutoFilterを使おうとするとき、WorksheetFunctionオブジェクトを介して使えるのか疑問に思う方が多いです。実は、AutoFilterはWorksheetFunctionには含まれず、Worksheetオブジェクトに属するメソッドとして使用します。この記事では、正しい使い方と注意点を解説します。
WorksheetFunctionとAutoFilterの関係
WorksheetFunctionはExcelの関数(SUM、VLOOKUP、AVERAGEなど)をVBAから呼び出すためのオブジェクトです。一方、AutoFilterはワークシート上の範囲にフィルターを適用する操作であり、関数ではありません。そのため、WorksheetFunctionではなく、WorksheetオブジェクトのRangeメソッド経由で使用します。
正しいAutoFilterの書き方
AutoFilterを適用する場合、まず対象のRangeを指定し、そのRangeに対してAutoFilterメソッドを呼び出します。
例。
With Worksheets("Sheet1").Range("A1:C10")
.AutoFilter Field:=1, Criteria1:="=Apple"
End With
この例では、Sheet1のA1:C10範囲に対して、1列目で”Apple”を条件にフィルターを適用しています。
複数条件や列へのフィルター
AutoFilterは複数の列や条件を同時に指定できます。Fieldパラメータで列番号を、Criteria1やCriteria2で条件を設定します。
例。
With Worksheets("Sheet1").Range("A1:C10")
.AutoFilter Field:=1, Criteria1:="=Apple"
.AutoFilter Field:=2, Criteria1:=">10"
End With
注意点とよくあるエラー
WorksheetFunction.AutoFilterと書くと、Objectが存在しないためエラーになります。また、Rangeオブジェクトを正しく指定しないと”Method AutoFilter of object Range failed”というエラーが出ます。
必ず対象のWorksheetとRangeを明示してから、AutoFilterを呼び出すようにしましょう。
まとめ
Excel VBAでAutoFilterはWorksheetFunctionではなく、WorksheetオブジェクトのRangeに対して適用するメソッドです。WorksheetFunctionは関数呼び出し専用であるため、AutoFilterのような範囲操作は対象外です。
正しくWorksheetとRangeを指定してAutoFilterを使用することで、VBAでのフィルター操作が安全に行えます。


コメント