gpt4 book ai didi

vba - 在 VBA 中比较字符串的最佳方法?

转载 作者:行者123 更新时间:2023-12-02 13:11:33 29 4
gpt4 key购买 nike

过去一个月我一直在使用 VBA(为了我的工作),自从我开始使用这种语言/脚本以来,在比较字符串时出现了几次问题。 .到目前为止我比较字符串的方法是:

  • str1 = str2str1 <> str2
  • StrComp(str1, str2, ComparisonMethod)
  • InStr(str1, str2)

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

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

例如:假设有两个列表。一个列表包含笔记本电脑型号,另一个包含零件号。目标是将所有零件号与型号相关联。我的结果仅产生部分关联,这意味着如果我有 10 个应与模型关联的零件号,则实际上只有 5 或 6 个。然后,我将无法正确比较的字符串在单独的代码中再次进行比较,然后得到正确的结果。这种行为在我使用 VBA 的整个过程中一直是一致的,这就是“感觉”的来源。

最佳答案

第一个问题是您是否想比较区分大小写或不区分大小写 - 换句话来说:是 "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 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

关于vba - 在 VBA 中比较字符串的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45215786/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com