在VBA中比较字符串的最佳方法是什么?

时间:2017-07-20 13:11:26

标签: excel vba excel-vba string-comparison

我过去一个月一直在使用VBA(因为我的工作),而且由于我已经开始使用这种语言/脚本,出现了一些比较字符串问题的问题< / strong> ..我到目前为止比较字符串的方式是:

  • str1 = str2 str1&lt;&gt; STR2
  • StrComp(str1,str2,comparisonMethod)
  • InStr(str1,str2)

有时,在使用这些比较方法之一之前,我首先应用UCase(str1),甚至UCase(Trim(str1))。根据我迄今为止的经验,比较VBA中的字符串似乎是一个相当易变的事情,因为我觉得我得到了不一致的结果。

问题:用于比较VBA中的两个字符串的 最佳程序 是什么?

例如:想象一下,有两个列表..一个列表包含笔记本电脑型号,另一个列表包含部件号。目标是将所有零件号与模型相关联。我的结果只产生部分关联,这意味着如果我有10个与模型相关联的零件号,那么实际上只有5个或6个。然后,我接受不能在单独的代码中进行正确比较和比较的字符串,然后得到正确的结果。在我使用VBA的过程中,这种行为有点保持一致,并且是“感觉”的地方。来自。

1 个答案:

答案 0 :(得分:8)

第一个问题是,如果您想比较区分大小写或不区分大小写 - 请使用其他单词:"ABC" = "abc"

= - 运算符的行为由Option Compare定义 - 默认值为binary

Option Compare text
sub foo1
    Debug.print "ABC" = "abc"    ' Prints "True"
end sub

Option Compare binary    ' <-- This is the default!
sub foo2
    Debug.print "ABC" = "abc"    ' Prints "False"
end sub

StrComp - 函数获得相同的结果,但无需在模块的顶部设置比较选项。相反,您可以提供所需的比较方式:

sub foo3
    Debug.Print StrComp("ABC", "abc", vbBinaryCompare) = 0     ' <-- Prints "False"
    Debug.Print StrComp("ABC", "abc", vbTextCompare) = 0       ' <-- Prints "True"
end sub

如果你的字符串中有前导或尾随空白,你总是必须使用trim - 我知道的任何编程语言就是这种情况。

使用Instr检查两个字符串是否相同是一个相当不错的主意,您可以将其用于子字符串搜索。请注意,InStr(及其对应的InstrRev)正在使用option compare设置:

Option Compare text
sub foo4
    Debug.print Instr("ABCDE", "cd")   ' Prints "3"
end sub

Option Compare binary
sub foo5
    Debug.print Instr("ABCDE", "cd")    ' Prints "0"
end sub