オートフィルタを解除し、なんらかの編集作業を行った後に、前のオートフィルタの状態に復帰させる方法を下記に記載します。 いろいろ調べたのですが、3つ以上の条件を設定した場合に対応したものがなかったので考えてみました。
オートフィルタの保存と復帰
Private Dim filterArray() Private currentFiltRange As String Private Function PRV_Save_Filters(T_Sheet As Worksheet) Dim f As Long With T_Sheet.AutoFilter ' フィルタ設定範囲 currentFiltRange = .Range.Address With .Filters 'フィルタ情報格納配列 ReDim filterArray(1 To .Count, 1 To 3) For f = 1 To .Count ' フィルタ情報を取得 With .Item(f) If .On Then ' フィルタ要素を配列に詰める filterArray(f, 1) = .Criteria1 '条件1の値とオペランド filterArray(f, 2) = .Operator 'And、Or、xlFilterValuesなどが設定される If .Operator And .Operator <> xlFilterValues Then ' フィルタ条件2つ filterArray(f, 3) = .Criteria2 '条件2の値とオペランド End If End If End With Next End With End With End Function Private Function PRV_Restore_Filters(T_Sheet As Worksheet) '現在のフィルタ設定範囲 Dim col As Long With T_Sheet ' 行の左から右にフィルタを設定していく For col = 1 To UBound(filterArray(), 1) If IsEmpty(filterArray(col, 1)) Then GoTo Continue End If If filterArray(col, 2) Then '識別子要素がある場合(And,Or等) If filterArray(col, 2) = xlFilterValues Then ' フィルタ条件3つ以上 .Range(currentFiltRange).AutoFilter field:=col, _ Criteria1:=filterArray(col, 1), _ Operator:=filterArray(col, 2) GoTo Continue End If ' フィルタ条件2つ .Range(currentFiltRange).AutoFilter field:=col, _ Criteria1:=filterArray(col, 1), _ Operator:=filterArray(col, 2), _ Criteria2:=filterArray(col, 3) GoTo Continue End If '識別子要素がない場合(And,Or等) ' フィルタ条件1つ .Range(currentFiltRange).AutoFilter field:=col, _ Criteria1:=filterArray(col, 1) Continue: Next End With End Function
オートフィルタを解除する
'フィルタ設定がある場合 If T_Sheet.FilterMode = True Then T_Sheet.ShowAllData End If
参考URL
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14103890229