- ベストアンサー
ExcelVBA:フィルターの状態を保存して後で復元したい?
いつもお世話になります。 オートフィルターを頻繁につかうワークシートについて: 1)あるときのフィルター状態を保存し 2)いろいろフィルター状態の変更を伴う処理をして 3)それが済んだら1)のフィルター状態に復元する という処理を行いたいです。 Dim myFilters As filters Set myFilters = ActiveSheet.AutoFilter.filters ・・・ Set ActiveSheet.AutoFilter.filters = myFilters ではダメですね。 それは確認しました。 具体的にどうすればいいのでしょうか。 ユーザーはどんなシートに対して、どんな凝ったフィルターをマクロ前に掛けているか分かりません。 この状態が絞れればラクなんですが・・・。 余談ですが、Excel2003では、 Set myFilters = ActiveSheet.AutoFilter.filters のようにfiltersが大文字になりません。 (大文字にしても小文字に変更される) バグでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
参考程度に Sub test() Dim i As Integer Dim myFilters As Variant On Error Resume Next ReDim myFilters(1 To ActiveSheet.AutoFilter.Filters.Count) For i = 1 To ActiveSheet.AutoFilter.Filters.Count myFilters(i) = ActiveSheet.AutoFilter.Filters(i).Criteria1 Next i MsgBox "フィルタを解除します" Selection.AutoFilter MsgBox "フィルタを元に戻します" For i = 1 To UBound(myFilters) If myFilters(i) <> "" Then Selection.AutoFilter Field:=i, Criteria1:=myFilters(i) End If Next i End Sub
その他の回答 (1)
- watabe007
- ベストアンサー率62% (476/760)
こんにちは 案1 対象のシートを丸ごと別シートにコピーし、処理後に戻す 案2 全フィールドの抽出条件を配列等に取得して処理後に再設定
お礼
まとめてですみません。 ううーん、やっぱそれしかないんですね。 オブジェクトが取得できるわけだから、ズバーンとできるのカナと一瞬夢想してしまいました。 どうもありがとうございます。