2016-07-08 3 views
1

시트에서 필터링 된 범위의 행 수를 찾으려고합니다. LstRow2는 내가 찾고자하는 변수입니다. 이 코드를 사용하면 필터링되지 않은 행이 표시됩니다.Excel VBA 필터링 된 마지막 행의 행

CSht.Range(CSht.Cells(1, 1), CSht.Cells(LstRow1, LstCol1)).AutoFilter Field:=2, Criteria1:="RA" 
     With CSht 
     LstRow2 = .UsedRange.SpecialCells(xlCellTypeLastCell).Row 
     End With 

Here is the data that I am filtering

답변

1

은이 라인

LstRow2 = .UsedRange.SpecialCells(xlCellTypeLastCell).Row 

를 대체하지 않습니다 .

이 시도 :

With CSht 

    'load filter cells into Range object 
    Dim rngFilter as Range 
    Set rngFilter = Intersect(.UsedRange,.UsedRange.Offset(1)).SpecialCells(xlCellTypeVisible) 

    'find the max number of elements split by $ in the range address 
     'needs to be dynamic because of areas 
    Dim lUpper as Long 
    lUpper = UBound(Split(rngFilter.Address,"$")) 

    'the last element will be the last row in the filtered range 
     'the last number in the rngFilter.Address 
    Dim LstRow2 as Long 
    LstRow2 = Split(rngFilter.Address,"$")(lUpper) 

End With 
+0

안녕 Scott. LastRow2가 잘못된 값으로 나왔다는 것을 깨달았습니다. 나 또한 위퍼가 뭔지 잘 모르겠다. 당신의 도움을 주셔서 감사합니다. – Liz

+0

@Liz -'lUpper'는 수식을'$'로 나눌 때 배열에서 가장 높은 원소를 잡는 변수입니다. 범위에서 영역의 양을 필터링 할 때 임의로 지정할 수 있기 때문에 필요합니다. 최상위 요소에는 항상 필터링 된 데이터의 마지막 행이 있습니다. 'LstRow2'가 잘못된 값으로 나오면, 무슨 뜻입니까? –

+0

값은 3이어야하지만 목록이 필터링되기 전에 요소의 수인 5로 나옵니다. – Liz

0

는 필터링 된 이후 왜, 당신은 단지 눈에 보이는 세포와 함께 작동하도록해야합니다

LstRow2 = .Cells(.rows.count, 1).end(xlup).row 
+0

나를 위해 작동하지 않은 한 줄에 당신을 위해 그것을 할 것입니다. 나는 같은 결과를 얻었습니다. – Liz

+0

'.End (xlUp)'는 필터링 된 범위를 무시하므로이 기능이 작동하지 않습니다. 전체적으로 워크 시트에서만 작동합니다. –

+0

이것은 지금 당장 나를 위해 일했습니다. 나는 열 1에 한자리 수를 집어 넣었고, 행 5의 어떤 것이 마지막 행이 될 것이고 행 6-10은 숨겨졌고 마지막 행은 5로 끝난다. 그래서 – Rodger

0

현재 지역

LastRow = sht.Range("A1").CurrentRegion.Rows.Count 
+0

이것은 나를 위해 작동하지 않았다. 행 수를 얻기 위해 이전과 같은 번호를 얻었습니다. – Liz

+0

그래, 두려웠습니다. 나는 당신을 위해 작동하지 않는 다른 결과를 기대하고 있기 때문에 두려웠습니다. 나머지 코드를 공유 할 수 있습니까? – Rodger

+0

아니면 데이터에 실제로 부족한 테스트 서브를 시도해보고 영향을 줄 수있는 다른 모든 요소를 ​​제거하고 코드 스 니펫 중 하나 또는 둘 모두가 그렇게 작동하는지 확인할 수 있습니까? – Rodger

관련 문제