つらつら Excel VBA

私の備忘録です。

オートフィルタ解除後にも絞り込み状態を継続させたい

非表示行を覚えておいて、復元させるだけです。
(オートフィルタを解除しなければいいだけの話では・・・?)

Sub オートフィルタで絞り込んで解除して非表示状態を復元する処理()
    
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("エクセルシート")
    If ws.FilterMode Then ws.ShowAllData 'オートフィルタ条件クリア
    
    'オートフィルタ絞り込み条件設定
    With ws.Range("A2")
        .AutoFilter Field:=8, Criteria1:="絞り込み条件1", Operator:=xlAnd, Criteria2:="絞り込み条件2"
        '.AutoFilter Field:=5, Criteria1:="絞り込み条件3" とかそんな感じで設定
    End With
    
    '非表示行を変数に格納
    Dim iRow As Integer
    Dim hiddenRows As Range '非表示行格納用
    
    iRow = 3
    Do While ws.Range("A" & iRow).Value <> ""
        
        If ws.Rows(iRow).Hidden Then
            If hiddenRows Is Nothing Then
                Set hiddenRows = ws.Rows(iRow) '1回目
            Else
                Set hiddenRows = Union(hiddenRows, ws.Rows(iRow)) '2回目以降の処理
            End If
        End If
        iRow = iRow + 1
        
    Loop
    
    'Debug.Print hiddenRows.AddressLocal
    ws.Range("A2").AutoFilter '引数無しでオートフィルタ解除
    ws.Range(hiddenRows.Address).EntireRow.Hidden = True '一括非表示
    'hiddenRows.EntireRow.Hidden = True '一括非表示
    
    Set ws = Nothing
End Sub