在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下一次出现的范围。