2012-06-01 2 views

답변

45

셀에 A2:A11의 숫자가 1 ~ 10이고 autofilter가 A1 인 것으로 가정합니다. 이제 5보다 큰 숫자 만 표시하도록 필터링합니다 (예 : 6, 7, 8, 9, 10).

만 볼 수 세포 인쇄됩니다이 코드 :

Sub SpecialLoop() 
    Dim cl As Range, rng As Range 

    Set rng = Range("A2:A11") 

    For Each cl In rng 
     If cl.EntireRow.Hidden = False Then //Use Hidden property to check if filtered or not 
      Debug.Print cl 
     End If 
    Next 

End Sub 

아마도 SpecialCells와 더 나은 방법이 있지만, 위의 엑셀 2003

편집에 나를 위해

그냥 볼 일을 더 좋은 방법은 SpecialCells :

Sub SpecialLoop() 
    Dim cl As Range, rng As Range 

    Set rng = Range("A2:A11") 

    For Each cl In rng.SpecialCells(xlCellTypeVisible) 
     Debug.Print cl 
    Next cl 

End Sub 
+0

모든 해답을 주셔서 감사를 참조 헤더가 행 1에 있다고 가정 Offset를 사용하는 것이 좋습니다 것입니다! 그것들은 모두 동일하거나 (SpecialCells (xlCellTypeVisible)을 사용하여 필자가 필요로하는 열쇠였습니다) 어느 답변이 옳은지 선택하기가 어려웠습니다. – mattboy

8

A1에서 필터링 된 데이터를 아래쪽으로 가정하는 편도;

dim Rng as Range 
set Rng = Range("A2", Range("A2").End(xlDown)).Cells.SpecialCells(xlCellTypeVisible) 
... 
for each cell in Rng 
    ...  
11

나는이 예

Option Explicit 

Sub Sample() 
    Dim rRange As Range, filRange As Range, Rng as Range 
    'Remove any filters 
    ActiveSheet.AutoFilterMode = False 

    '~~> Set your range 
    Set rRange = Sheets("Sheet1").Range("A1:E10") 

    With rRange 
     '~~> Set your criteria and filter 
     .AutoFilter Field:=1, Criteria1:="=1" 

     '~~> Filter, offset(to exclude headers) 
     Set filRange = .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow 

     Debug.Print filRange.Address 

     For Each Rng In filRange 
      '~~> Your Code 
     Next 
    End With 

    'Remove any filters 
    ActiveSheet.AutoFilterMode = False 
End Sub 
+0

이것은 문제를 해결하는 좋은 방법입니다. 네 접근 방식이 좋아. –

+1

좋은 해결책 Sid. 그러나 'SpecialCells'를 사용하는 동안 매우 신중할 것입니다. Excel이 최근에이 셀의'.Address'를 보내는 방식 때문에 문제가 발생했습니다. –

+0

@PankajJaju : 나는 당신을 얻지 못해서 미안합니다. 무슨 뜻인지 설명해 주시겠습니까? 아마도 예를 들어? –

-1
Call MyMacro() 

ActiveCell.Offset(1, 0).Activate 

Do Until Selection.EntireRow.Hidden = False 
If Selection.EntireRow.Hidden = True Then 
ActiveCell.Offset(1, 0).Activate 
End If 
Loop 
+1

코드가하는 일에 대한 설명을 제공하면 도움이 될 것입니다. –

관련 문제