dim lStartRow as long, lLastRow as long, wsData as worksheet, rngArea as range, rngRow as range set wsData = thisworkbook.worksheets("mysheet") lStartRow = 1 lLastRow = wsData.Cells.Find(What:="*", _ After:=wsData.Range("A1"), _ LookAt:=xlPart, _ LookIn:=xlFormulas, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious, _ MatchCase:=False).Row for each rngArea in wsData.range(lStartRow & ":" & lLastRow).SpecialCells(xlCellTypeVisible).Areas for each rngRow in rngArea.rows msgbox "Row " & rngRow.row & " is visible" next rngRow next rngArea