2015-09-30 3 views
0

Я фильтрую таблицу в Excel, но мне нужна только первая строка.Как выбрать первую видимую строку после применения фильтра

+0

Как выглядит ваш оператор фильтра сейчас? – JenB

+0

Давай, я просто не показываю, потому что это на моей работе, и я не могу показать это здесь. Это просто фильтр в листе, некоторые строки были подавлены, и я хочу взять первую строку, которая появляется – alexandre

+1

Что происходит с «Давай»? Если вы предоставите свой vba для фильтра, то ответчики могут дать вам конкретный совет о том, как изменить vba, чтобы делать то, что вы хотите. – JenB

ответ

2

Используйте Range.SpecialCells method с параметром xlCellTypeVisible в отфильтрованном диапазоне. .Rows(1).Cells должно быть тем, что вы хотите.

Sub first_row() 
    Dim rFirstFilteredRow As Range 
    With Worksheets("Sheet1") 
     With .Cells(1, 1).CurrentRegion 
      'do all the .autofilter stuff here 
      With .Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0) 
       If CBool(Application.Subtotal(103, .Cells)) Then 
        Set rFirstFilteredRow = _ 
         .SpecialCells(xlCellTypeVisible).Rows(1).Cells 
        '~~> rFirstFilteredRow is not a copy of the first visible row 
        'do something with rFirstFilteredRow 
       End If 
      End With 
     End With 
    End With 
End Sub 

Вы должны транскрибировать это, чтобы удовлетворить свои собственные реализации AutoFilter Method.


Уроженец лист SUBTOTAL function был использован как он рассчитывает только видимые ячейки. Это простой неразрушающий способ определить, есть ли какие-либо ячейки для ссылки после применения фильтра.

1
Worksheets("Raw").AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).Cells(Row, Column) 
+0

Это работало для меня .. вдохновлено кодом выше. frow_main = Рабочие листы (main_sheet_name) .AutoFilter.Range.Offset (1) .SpecialCells (xlCellTypeVisible) .Cells(). Строка – S4nd33p

Смежные вопросы