在Excel中匹配第N个实例

我正在使用电子表格上的匹配function和电子表格有相同的关键字,但在不同的行,我试图获取行号,并做到这一点,我想使用关键字的第二个实例。 如何在VBA中完成我目前的代码

Application.WorksheetFunction.Match("Hello", Range("A1:A100"), 0) 

我正在考虑使用索引function,但我不确定如何使用它。

一个下面开始第二个比赛:

 Sub dural() Dim rw As Long With Application.WorksheetFunction rw = .Match("Hello", Range("A1:A1000"), 0) rw = .Match("Hello", Range("A" & (rw + 1) & ":A1000"), 0) + rw MsgBox rw End With End Sub 

在这里输入图像说明

如果你想要第N 匹配,我会使用Find()FindNext()循环。

编辑#1:

另一种查找第N 实例的方法是在VBA中评估()典型的数组公式。 对于N = 3 ,在工作表中,数组公式为:

 =SMALL(IF(A1:A1000="Hello",ROW(A1:A1000)),3) 

所以用VBA:

 Sub dural() Dim rw As Long, N As Long N = 3 rw = Evaluate("SMALL(IF(A1:A1000=""Hello"",ROW(A1:A1000))," & N & ")") MsgBox rw End Sub 

这是一个使用Range.Find的方法。

 Option Explicit Sub FindSecond() Dim rSearch As Range, C As Range Const sSearchFor As String = "Hello" Dim sFirstAddress As String Set rSearch = Range("A1:A100") With rSearch 'Note that search starts at the bottom Set C = .Find(what:=sSearchFor, after:=rSearch(.Rows.Count, 1), _ LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlByRows, _ searchdirection:=xlNext, MatchCase:=False) If Not C Is Nothing Then sFirstAddress = C.Address Set C = .FindNext(C) If C.Address <> sFirstAddress Then MsgBox "2nd instance of " & sSearchFor & " on row " & C.Row Else MsgBox "Only one instance of " & sSearchFor & " and it is on row " & C.Row End If Else MsgBox "No instance of " & sSearchFor End If End With End Sub 

在这里输入图像说明

可能有更好的方法,但是这个工作:

=MATCH("Hello",INDIRECT("A"&(1+MATCH("Hello",A1:A100,0))&":A100"),0)

这将返回第二次出现的索引,通过search第一次出现并使用它来定义search下一次出现的范围。