- 締切済み
VBAにてオートフイルタの制御に関する質問
お世話になります。 Excel」のVBAで例えばオートフィルタの状態が、 IF文か何かの条件式で Range("a4").AutoFilter Field:=1, Criteria1:="=" であった時、 Range("a4").AutoFilter Field:=1 にする。 といった様にしたいのですが、どの様にコードを 書いたら良いのか分からなく、 ご教示頂きたく何卒、よろしくお願い申し上げます。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- end-u
- ベストアンサー率79% (496/625)
例えば、フィルタの抽出状態を全て解除するなら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