VBA: поиск и выбор последней найденной строки в столбце, содержащем повторяющиеся записи - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь найти столбец, в котором есть повторяющиеся записи информации.Я хочу выбрать последнее найденное вхождение строки в столбце.Как я могу это сделать?

Если возможно, пожалуйста, покажите мне, как это можно сделать с помощью метода Selection.Find.

Columns("A:A").Select

Selection.Find(What:="foobar", After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Activate

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Я нашел ответ, который искал.Если для свойства SearchDirection установлено значение xlPrevious, оно найдет последнее значение в диапазоне.Затем на ячейку можно сфокусироваться, используя метод .Select.Однако, если искомое значение является подстрокой других значений в столбце, он может выбрать неправильную ячейку.Это решается с помощью цикла while, который проверяет значение найденной ячейки и продолжает поиск предыдущего значения, если это не та строка, которую мы ищем.

Sub FindLast()
Dim fc As Range
Dim my_var As String
Dim cell_check As Variant
my_var = "String 1"

Set fc = Worksheets("Sheet1").Columns("A").Find(what:=my_var, _
            SearchDirection:=xlPrevious)
fc.Select
cell_check = ActiveCell.Value

While cell_check <> my_var
    Set fc = Worksheets("Sheet1").Columns("A").FindPrevious(after:=fc)
    fc.Select
    cell_check = ActiveCell.Value
Wend

End Sub

Я нашел решение, прочитав документацию на веб-сайте Microsoft.https://docs.microsoft.com/en-us/office/vba/api/excel.range.findprevious

0 голосов
/ 14 ноября 2018
Sub FindAndSelectAll()
    Dim str As String, cll As Range, c As Range
    Dim rSearch As Range

    Set rSearch = Range("A1").CurrentRegion

    With rSearch
        For Each cll In rSearch
            Set c = .Find(cll.Value2, _
                        LookIn:=xlValues, _
                        searchdirection:=xlPrevious)

            If Not c Is Nothing And cll.Row < c.Row Then
                Range(c.Address).Interior.Color = 65535
            End If

        Next
    End With

End Sub

enter image description here

...