String 什么是VBA';s字符串比较算法?

String 什么是VBA';s字符串比较算法?,string,vba,algorithm,excel,String,Vba,Algorithm,Excel,我试图加快程序在数组中搜索字符串的速度。例如,我正在编写一个程序,在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测试

我试图加快程序在数组中搜索字符串的速度。例如,我正在编写一个程序,在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如何固有地寻找要匹配的整个字符串。当我要求VBA查找
Value=“string”
时,如果有人能够解释VBA所经历的过程,那么它将非常有用。谢谢

如何使用以下方法查找给定值是否存在于某个范围内:
Range.Find
方法具有可选参数,可用于指定全部或部分匹配、区分大小写等

如何使用
Match
函数查找某个范围内存在的给定值。 注意:
Application.Match
函数与类似,只是如果未找到匹配项,则
应用程序
类将返回错误类型(因此需要将其返回值定义为
变量
,而
工作表函数
类将引发错误)

匹配函数的限制:匹配函数只适用于精确匹配(使用
False
参数)或近似匹配(使用
True
msoTrue
msoCTrue
参数),其中内置了一些其他假设,即数据已排序)。
Match
功能只能在单列范围或单行范围内使用。

如何使用以下方法查找某个范围内是否存在给定值:
Range.Find
方法具有可选参数,可用于指定全部或部分匹配、区分大小写等

如何使用
Match
函数查找某个范围内存在的给定值。 注意:
Application.Match
函数与类似,只是如果未找到匹配项,则
应用程序
类将返回错误类型(因此需要将其返回值定义为
变量
,而
工作表函数
类将引发错误)


匹配函数的限制:匹配函数只适用于精确匹配(使用
False
参数)或近似匹配(使用
True
msoTrue
msoCTrue
参数),其中内置了一些其他假设,即数据已排序)。
Match
功能只能用于单列范围或单行范围。

为什么不直接使用
范围。Find
方法?或
Match
功能?如果你在看优化,肯定有比依赖(看起来是)蛮力单元式迭代更好的内置方法。一旦你开始重复读取单元,任何可能的好处都会消失——到工作表读取值的开销相对较大,所以反复这样做并不是一个好的方向。你关于如何执行搜索的想法可能是正确的。但是,你也需要考虑它的ANSI,UTF-8,UTF-16…等等,你明白了。因此,这里给出的建议是您的最佳选择。依赖内置函数。您的问题是“编译器如何计算stringa=stringb”?为什么不直接使用
范围。Find
方法?或者
Match
函数?如果你在看优化,肯定有比依赖(看起来是)蛮力单元式迭代更好的内置方法。一旦你开始重复读取单元,任何可能的好处都会消失——到工作表读取值的开销相对较大,所以反复这样做并不是一个好的方向。你关于如何执行搜索的想法可能是正确的。但是,你也需要考虑它的ANSI,UTF-8,UTF-16…等等,你明白了。因此,这里给出的建议是您的最佳选择。依赖内置函数。您的问题是“编译器如何计算stringa=stringb”?
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
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