VBA:在包含重复条目的列中搜索并 select 最后找到的字符串

VBA: Search and select last found string in a column containing duplicate entries

我正在尝试搜索包含重复信息条目的列。我想 select 列中字符串的最后一次出现。我该怎么做?

如果可能,请告诉我如何使用 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
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

我找到了我要找的答案。通过将 SearchDirection 属性 设置为 xlPrevious,它将找到范围内的最后一个值。然后可以使用 .Select 方法关注该单元格。但是,如果正在搜索的值是该列中其他值的子字符串,它可能 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