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!"
在每个找到的单元格旁边插入一些文本。
对于这两个法线,我没有得到相同的结果。有人可以解释一下吗?
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!"
在每个找到的单元格旁边插入一些文本。