我过去一个月一直在使用VBA(因为我的工作),而且由于我已经开始使用这种语言/脚本,出现了一些比较字符串问题的问题< / strong> ..我到目前为止比较字符串的方式是:
有时,在使用这些比较方法之一之前,我首先应用UCase(str1),甚至UCase(Trim(str1))。根据我迄今为止的经验,比较VBA中的字符串似乎是一个相当易变的事情,因为我觉得我得到了不一致的结果。
问题:用于比较VBA中的两个字符串的 最佳程序 是什么?
例如:想象一下,有两个列表..一个列表包含笔记本电脑型号,另一个列表包含部件号。目标是将所有零件号与模型相关联。我的结果只产生部分关联,这意味着如果我有10个与模型相关联的零件号,那么实际上只有5个或6个。然后,我接受不能在单独的代码中进行正确比较和比较的字符串,然后得到正确的结果。在我使用VBA的过程中,这种行为有点保持一致,并且是“感觉”的地方。来自。
答案 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