Excel VBAでWorksheetFunction.AutoFilterを使うには?|Worksheetとの違いと正しい使い方

Visual Basic

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でのフィルター操作が安全に行えます。

コメント

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