2014-10-19 2 views
0

VBA의 다양한 옵션을 사용하여 필터가 활성화 된 워크 시트에서 행 번호를 찾습니다.Excel VBA : 필터를 사용할 수있는 행을 찾습니다.

If ThisWorkbook.Sheets(1).AutoFilterMode = True Then 

위의 행은 시트에 필터가 포함되어 있는지 만 확인하지만 어떤 행 번호에 필터가 있는지 알아야합니다.

Function CheckWhichRowHasFilter(r As range) 
For Each rowi In r.Rows' Dim rowi As range 
Set pa = rowi.Parent.AutoFilter'Dim pa As AutoFilter 
If pa.FilterMode = True Then 
    CheckWhichRowHasFilter = pa.range.Address 
    Exit For 
End If 
Next rowi 
End Function 

이 필터를 통해 반복하는 방법이다 :

답변

0

이 질문에 똑바로 대답입니다. 확인하려는 속성이 Filter.On입니다.

Sub IterateThroughFilters() 
Dim r As range 
Set r = Selection 
Dim rc As range 
For Each rc In r.Columns 
    If Not rc.Parent.AutoFilter Is Nothing Then 
    Set currentColumnFilter = rc.Parent.AutoFilter ' Filteraddress: = currentColumnFilter.range.Address 
     Dim ccf As filters 
     Set ccf = currentColumnFilter.filters 
     Dim cf1 As filter 
     Set cf1 = ccf(1) 'onebased index 
      If cf1.On Then 'Here you check if filter is on 

       cfc1 = cf1.Criteria1(1) 
       cfc2 = cf1.Criteria1(2) 
       cfc3 = cf1.Criteria1(3) 
      End If 
    End If 

Next rc 

End Sub 
+0

왜 '각 루프'를 반복하여 자동 필터를 찾아야합니까? –

+0

나는 그가 어떤 필터에 관심이 있다고 생각한다. 각 행에는 몇 가지 필터가있을 수 있으며 일부 필터는 사용할 수 있습니다. 행 열을 반복하여 찾기를 원한다면 명확하지 않습니다. – anefeletos

+0

하나의 워크 시트에 최대 하나의 필터를 적용 할 수 있습니다. 그래서 ThisWorkbook.Sheets (1) .AutoFilter.range가 작업을 수행 할 것입니다. –

0

이 작업은 수행해야합니다.

Sub test() 

    Dim rngRange  As range 

    If ThisWorkbook.Sheets(1).AutoFilterMode = True Then 
     Set rngRange = ThisWorkbook.Sheets(1).AutoFilter.range 
     MsgBox "Address of Filter: " & rngRange.Address & Chr(10) _ 
       & "Row Number is: " & rngRange.Row, vbOKOnly 
    End If 

    Set rngRange = Nothing 

End Sub