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
我正在尝试搜索包含重复信息条目的列。我想 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