Проблема с поиском последней использованной строки в отфильтрованных данных - PullRequest
0 голосов
/ 05 марта 2020

ниже - пример данных, которые фильтруются, и мой фрагмент кода не может найти правильную последнюю использованную строку в отфильтрованных данных. Первая используемая строка здесь - 419 - и это хорошо, но последняя должна быть 423, но она показывает самую последнюю строку 1048576. Я не знаю почему, но код показывает правильный LastRow только тогда, когда отфильтрованные данные начинаются со 2-го ряд.

R Number    Name
4879668 Maria L
4879668 Thomas Y
4879668 Eleanor B
4879668 Eleanor B
4879668 Sandra J


Sub find()

Dim rFiltered As Range

With ActiveSheet.AutoFilter.Range
  Set rFiltered = .Resize(.Rows.Count - 1).Offset(1).Columns(2).SpecialCells(xlCellTypeVisible)
End With

'is shows 419 - and that is fine
FirstRow = rFiltered.Cells(1, 1).End(xlToLeft).Row
'it shows the very last row 1048576, not the last row in a filtered range
'it should be 423
LastRow = rFiltered.Cells(FirstRow).End(xlDown).Row

For r = FirstRow To LastRow
    If Sheet1.Cells(r, 2).Value = "Maria L" Then
    Rows(r).Interior.Color = rgbBlue
    End If
Next r


End Sub

Ответы [ 3 ]

0 голосов
/ 05 марта 2020

решено:

Я изменил эту часть:

LastRow = rFiltered.Cells(FirstRow).End(xlDown).Row

на эту:

LastRow = Sheet1.Range("A" & Sheet1.Rows.Count).End(xlUp).Row
0 голосов
/ 05 марта 2020

Чтобы объяснить, почему добавьте оператор debug.print.

With ActiveSheet.AutoFilter.Range
    Set rFiltered = .Resize(.Rows.Count - 1).Offset(1).Columns(2).SpecialCells(xlCellTypeVisible)
End With
Debug.Print rFiltered.Address

firstrow = rFiltered.Cells(1, 1).End(xlToLeft).Row
Debug.Print firstrow
Debug.Print rFiltered.Cells(firstrow).Address

Применение фильтра для Eleanor B и одностадийный с F8

1-й отпечаток показывает $ B $ 4: $ B $ 5 для отфильтрованный адрес

2-й отпечаток показывает 4 для $ B $ 4 строка

3-й отпечаток показывает $ B $ 7? Почему, потому что это 4-я строка диапазона фильтра "$ B $ 4: $ B $ 5"

$ B $ 7 пуста, поэтому последняя строка является нижней.

0 голосов
/ 05 марта 2020

Скажем, мы начинаем с:

enter image description here

и затем применяем фильтр:

enter image description here

Следующая строка получит номер последней видимой строки в отфильтрованных данных:

Sub framm()
    Dim r1 As Range, r2 As Range, r3 As Range, Last As Long

    Set r1 = ActiveSheet.AutoFilter.Range
    Set r2 = r1.SpecialCells(xlCellTypeVisible)
    Set r3 = r2.SpecialCells(xlCellTypeLastCell)
    Last = r3.Row

    MsgBox Last
End Sub

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...