我正在尝试加快程序搜索数组中字符串的方式。因此,例如,我正在编写一个程序,在1000个随机单词的列中搜索单词“test”。
目前我的程序很简单:
If Cells(x,1).Value = "test" Then
...
End If
然而,这是我的想法,
If Left(Cells(x,1).Value,1) = "t" Then
If Left(Cells(x,1).Value,2) = "te" Then
... and so on ...
End If
但后来我开始怀疑,当我要求VBA
测试是否value = "test"
时,它是否会经历我在第二段代码中概述的过程?基本上,我的问题是,第二个代码是多余的吗?我不熟悉VBA本身如何寻找匹配的整个字符串。如果有人能够了解当我要求它寻找Value = "string"
时VBA所经历的事情,它可能会有所帮助。谢谢!
答案 0 :(得分:0)
Range.Find
method Dim rng as Range
Dim found as Range
Dim val As String
val = "test" '## Modify as needed
Set rng = Range("A1:A1000") '## Modify as needed
Set found = rng.Find(val)
'The Range.Find method will return a Nothing if the value is not found
If found Is Nothing Then
MsgBox "Not found!"
Else
'do something with it...
End If
Range.Find
方法具有可选参数,可用于指定整体或部分匹配,区分大小写等。
Match
函数在一个范围内查找给定值。注意:Application.Match
函数类似于WorksheetFunction.Match
,但如果匹配未找到,则Application
类将返回错误类型(因此需要将其返回值定义为Variant
,而WorksheetFunction
类将引发错误。)
Dim rng as Range
Dim found as Variant
Dim val as String
val = "test" '## Modify as needed
Set rng = Range("A1:A1000") '## Modify as needed
found = Application.Match("test", rng, False)
'The Application.Match function will return an Error Type if the val is not found
If IsError(found) Then
MsgBox "Not found!"
Else
'do something with it
End If
Match
函数的限制: Match
函数仅适用于完全匹配(使用False
参数)或近似匹配(使用True
,msoTrue
或msoCTrue
参数),其中内置了一些其他假设,即数据已排序)。 Match
函数只能用于单列范围或单行范围。