Найти второе последнее вхождение определенного значения в столбце - PullRequest
0 голосов
/ 02 марта 2020

Я пытаюсь найти номер строки второго последнего экземпляра для определенного значения.

См. Пример снимка экрана ниже:

Изображение имеет 4 значения в столбце, и я пытаюсь найти второй до последнего экземпляра значения, скажем, GR 3, который находится в строке 5. Мне нужно найти вторую последнюю строку.
то есть строку 3, однако я попытался использовать приведенный ниже код .

Range("E:E").Find(what:="GR 3", after:=Range("E1"), searchdirection:=xlPrevious)

Приведенный выше код дает мне либо последнее вхождение.
то есть строку 5, и если я удаляю параметр направления поиска, это дает мне только первое вхождение
т.е. строку 2.

Ответы [ 2 ]

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

Приведенный ниже код проведет l oop через диапазон и рассмотрит диапазон от первой ячейки до значения i. В первом «где» я устанавливаю значение последнего вхождения моего желаемого значения в «что». Во втором «где» я нахожу предыдущее вхождение «что» на основе предыдущего значения где, которое дает мне адрес моего второго последнего вхождения, и, наконец, переменная col сохраняет номер строки из адреса, хранящегося в where.

Sub Find()

Dim where As Range
Dim col as Long

For i=2 to ThisWorkbook.Sheets("Sheet1").Range("B" & Rows.Count).End(xlUp).row

Set where = Range("E2:E" & i).Find(what:=ThisWorkbook.Sheets("Sheet1").Cells(i, 5).Value, after:=Range("E2"), searchdirection:=xlPrevious)

Set where = ThisWorkbook.Sheets("Sheet1").Range("E2:E" & i).FindPrevious(where)

col = Mid(where.Address(0, 0), 2)

Next i

End Sub
0 голосов
/ 02 марта 2020

если вы отфильтруете это значение, вы можете использовать это:

 ActiveSheet.Range("$A$1:$A$7").AutoFilter Field:=1, Criteria1:="GR 3"
 ActiveSheet.AutoFilter.Range.Offset(2).SpecialCells(xlCellTypeVisible).Cells(1, 1).row

выберет вторую строку в фильтруемом значении столбца.

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