用VBAselect“查找”的第二个结果

我试图让我能find第二个“灯”的结果,以防万一出现这个词。 下面的代码find了考虑范围内的第一个事件。

Dim ws As Worksheet Dim rng1 As Range Dim y As Range Columns("B:B").Select Selection.Find(What:="1", After:=ActiveCell, LookIn:=xlValues, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _ , SearchFormat:=False).Select Set x = Range(Selection, Selection.End(xlDown)).Offset(0, 3) Range(x.Address(0, 0)).Select Selection.Find(What:="Lights", After:=ActiveCell, LookIn:=xlValues, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _ , SearchFormat:=False).Activate Selection.FindNext(After:=ActiveCell).Activate Selection.FindNext(After:=ActiveCell).Select 

FindNext提供你想要的。 使用它很简单:按照您现在正在执行的第一个search(尽pipe将结果分配给Range ),并将结果范围作为FindNext起始点。 在这里你有一个适合你的具体要求的示例代码( secondAddress是第二个“光”的Address ,如果有的话):

  Dim foundRange As Range Dim rangeToSearch As Range Set rangeToSearch = Selection Set foundRange = rangeToSearch.Find(What:="Lights", After:=ActiveCell, LookIn:=xlValues, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _ , SearchFormat:=False) 'First Occurrence Dim secondAddress As String If (Not foundRange Is Nothing) Then foundRange.Activate Dim count As Integer: count = 0 Dim targetOccurrence As Integer: targetOccurrence = 2 Dim found As Boolean Do While Not found Set foundRange = rangeToSearch.FindNext(foundRange) If Not foundRange Is Nothing Then count = count + 1 If (count >= targetOccurrence - 1) Then secondAddress = foundRange.Address Exit Do End If Else Exit Do End If Loop End If 

我发现一个更简单的方法,因为它听起来像我有一个类似的问题。

如果你简化你的searchfunction:

 Cells.Find(What:="xxxx", After:=Cells(1, 1), LookIn:=xlValues, _ LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False).Select 

然后在下面添加另一行:

 Cells.Find(What:="xxxx", After:=ActiveCell, _ LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, _ SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Select 

所有这一切都是find第一次出现的“xxxx”,然后第二个代码find“xxxx”,但是从第一个查找代码(即ActiveCell)的结果开始search。