• 締切済み

VBAにてオートフイルタの制御に関する質問

お世話になります。 Excel」のVBAで例えばオートフィルタの状態が、 IF文か何かの条件式で Range("a4").AutoFilter Field:=1, Criteria1:="=" であった時、 Range("a4").AutoFilter Field:=1 にする。 といった様にしたいのですが、どの様にコードを 書いたら良いのか分からなく、 ご教示頂きたく何卒、よろしくお願い申し上げます。

みんなの回答

  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

例えば、フィルタの抽出状態を全て解除するならShowAllDataメソッドが使えます。(エラー制御は必要) そうではなくて、AutoFilter範囲の特定列のフィルタに対して処理したい場合、 FilterオブジェクトのOnプロパティを調べる事になります。 選択セル列のフィルタに対する処理の例は Sub try()   Dim r As Range   Dim i As Long   If TypeName(Selection) <> "Range" Then Exit Sub   With ActiveSheet     If .AutoFilterMode Then       If .FilterMode Then         With .AutoFilter.Range           i = .Column - 1           Set r = Intersect(Selection.Cells(1).EntireColumn, .Rows(1))         End With         If Not r Is Nothing Then           i = r.Column - i           If .AutoFilter.Filters(i).On Then             'フィルタ条件がOnの時の処理             r.AutoFilter i           Else             'フィルタ条件がOffの時の処理           End If         End If       End If     End If   End With End Sub ..このような感じですが、 もしIf分岐が必要なく、とにかく条件を解除したいだけなら簡単です。 フィルタ条件のOn|Off係わらず >Range("a4").AutoFilter Field:=1 これを実行すれば良いです。 同じ考え方での上記tryの簡略版としては以下。 Dim r As Range On Error Resume Next With ActiveSheet.AutoFilter.Range   Set r = Intersect(Selection.Cells(1).EntireColumn, .Rows(1))   r.AutoFilter r.Column - .Column + 1 End With