Excel - VBA

Filter된 영역에서 Macro 작업하기

EGTools 2023. 7. 3. 21:16
728x90

AutoFilter를 사용중인 영역에서 Macro작업을 할 필요가 있을 때에

이미 설정된 Filter 정보를 저장했다가 Macro 작업 이후 다시 동일한 설정을 할 필요가 있을 때

아래와 같이 Backup 및 Restore를 할 수 있습니다.

 

먼저 필터가 적용중인 주소를 저장할 변수를 설정합니다.

Private cFilteredAddress As Variant     '필터된 영역의 주소 저장용

 

필터를 백업할 때는 각 열마다 필터된 첫번째 내용(Criteria1),  연산자(Operator), 두번째 내용(Criteria2)를 배열을 이용하여 저장해 둡니다.

Public Function BackUpFilters(sh As Worksheet)

    Dim FilterArray As Variant
    Dim col As Integer, f As Integer
    
    If IsMissing(sh) Or sh Is Nothing Then Set sh = ActiveSheet

    With sh.AutoFilter
        On Error Resume Next
        cFilteredAddress = .Range.Address
        On Error GoTo 0
        If cFilteredAddress = vbNullString Then Exit Function
        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
                        If .Operator Then
                            FilterArray(f, 2) = .Operator
                            On Error Resume Next
                            FilterArray(f, 3) = .Criteria2 
                            On Error GoTo 0
                        End If
                    End If
                End With
            Next f
        End With
    End With
    
    BackUpFilters = FilterArray
    
End Function

 

Macro작업을 완료한 이후에 백업된 필터 배열을 읽어서 다시 설정해 주도록 합니다.

Private Sub ReStoreFilters(sh As Worksheet, FilterArray As Variant)

    Dim col As Integer, f As Integer
    
    If IsMissing(sh) Or sh Is Nothing Then Set sh = ActiveSheet
    For col = 1 To UBound(FilterArray, 1)
        If Not IsEmpty(FilterArray(col, 1)) Then
            If FilterArray(col, 2) Then
                sh.Range(cFilteredAddress).AutoFilter field:=col, _
                Criteria1:=FilterArray(col, 1), _
                Operator:=FilterArray(col, 2), _
                Criteria2:=FilterArray(col, 3)
            Else
                sh.Range(cFilteredAddress).AutoFilter field:=col, _
                Criteria1:=FilterArray(col, 1)
            End If
        End If
    Next col
    
    FilterArray = Empty
    
End Sub

 

이 매크로는 보이는 셀에 붙여넣기 할 때에 사용되었습니다.

 

728x90