WorksheetFunction.Match 错过比赛

WorksheetFunction.Match miss match

对于这两个法线,我没有得到相同的结果。有人可以解释一下吗?

    Dim mnt As String
    Dim I As Integer

Ligne = 3

'Case 1: Working
mnt = Cells(WorksheetFunction.Match(r.Offset(, -4), Sheets(7).Range("I3:I200"), 0) + 2, 9).Address
    
'Case 2: Not working
mnt = Cells(WorksheetFunction.Match(r.Offset(, -4), Sheets(7).Range("I" & Ligne & ":I200"), 0) + 2, 9).Address

但是如果我 Range("I" & Ligne & ":I200").select 它 select 正确范围 I3:I200

在情况 2 中,没有错误消息,它只是接缝到总是 return I3 的值而不是在 I3:I200.

中搜索

谁能解释一下为什么在第二种情况下它不起作用?

谢谢

针对您的评论,我建议切换方法以使用 Range.Find and .FindNext。这两个方法可以快速搜索一个sheet的字符串值和return它的位置。 FindNext 方法允许您重复搜索,找到具有相同字符串值的其他单元格。

这是一个如何制作 .Find.FindNext 循环的简单示例。

Sub Example()
    'Find all instances of "Steve" on the activesheet and highlight them
    Call Highlight("Steve")
End Sub

Sub Highlight(FindText As String, Optional WithinSheet As Worksheet)
    If WithinSheet Is Nothing Then Set WithinSheet = ActiveSheet

    Dim rFirst As Range
    Set rFirst = WithinSheet.Cells.Find(What:=FindText, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
    
    Dim rNext As Range
    Set rNext = rFirst
    Do
        Set rNext = WithinSheet.Cells.FindNext(After:=rNext)
        rNext.Interior.Color = 65535
    Loop While Not rNext.Address = rFirst.Address
End Sub

要使用此想法创建您自己的子单元,您可以将行 rNext.Interior.Color = 65535 替换为您希望对在此循环中找到的每个单元格执行的任何其他操作。例如,您可以 rNext.Offset(0,1) = "Here!" 在每个找到的单元格旁边插入一些文本。