2013-02-26 3 views
0

열의 값을 기반으로 일부 셀을 필터링하려고하는데 filtermode를 false로 설정하여 필터를 해제하려고해도 첫 번째 필터 동작이 나머지를 오염시키는 것을 두려워합니다.자동 필터가 제대로 작동하지 않습니다.

Function GetRowRange(sheetRange, column, value) As Range 
'check for a valid section column 
sheetRange.AutoFilterMode = False 
sheetRange.UsedRange.AutoFilter Field:=column, Criteria1:=value 
Set GetRowRange = sheetRange.UsedRange.SpecialCells(xlCellTypeVisible) 
MsgBox ("col:" & column & " val: " & value & " rows:" & GetRowRange.Rows.Count) 
sheetRange.AutoFilterMode = False 
End Function 

을 그리고 MSGBOX에서 나는 첫 번째 되돌아 볼 수있는 행

+0

어떻게 든이 코드는 친숙 해 보입니다! ;-) –

+0

@ PeterAlbert 새 스레드를 만들고 친절한 도움을 얻지 못할 것이라고 생각했습니다. – Jakob

답변

3

이 꽤 불쾌한 문제 :

내 선택 방법은 다음과 같습니다! :-)

자동 필터와 .SpecialCells(xlCellTypeVisible)을 적용한 후 새로운 Range 개체가 여러 개의 결합 된 범위로 구성되는 것이 문제입니다.

예. , B이 테이블을 필터링 할 때 enter image description here

당신의 범위 객체는 3 개 지역, 각 × 2 세포를해야합니다. 어떤 이상한 이유로, Rows.Count 계정에 그 지역을 고려하지 않기 때문에 3.해야하지만 당신이 행 열거를 통해 루프가 예상대로 작동 있을지 Selection.Rows.Count는, 그러나 하나입니다 :

lngCount = 0 
For Each r In Selection.Rows 
    lngCount = lngCount + 1 
Next 

이 뜻을 return

따라서 GetRowRange은 올바른 범위를 반환하지만 .Rows.Count 루틴은 잘못된 결과를 제공합니다.

Function RowCount(rngAreas As Range) As Long 
    Dim lngCount As Long 
    Dim rng As Range 
    For Each rng In rngAreas.Areas 
     lngCount = lngCount + rng.Rows.Count 
    Next 
    RowCount = lngCount 
End Function 

그냥 보조 노트를 : : 대신이 기능을 사용하여 GetRowRange는 항상 테이블의 첫 번째 머리글 행을 반환합니다 알고, 그래서 그에 따라이 문제를 해결할!

+0

이상한 문제가 다시 발생했습니다. – Jakob

+0

부작용으로 .CountiF와 같은 Excel 기능이 있는지 아시나요? 이것에 의해 영향을받습니다 - 나는이 이상한 버그를 가지고 있는데, 하나의 컬럼에서 이것을 할 때, Field : = 2는 잘 동작하지만, Field : = 3 일 때는 작동하지 않으며, 2 또는 3 개의 로우 만 리턴됩니다. 나는 실행한다. 칼럼에있는 숫자는 – Jakob

+0

모른다. :-(어쩌면'.Subtotal' 대신에 시도해 보시겠습니까? –

관련 문제