在VBA中如何消除单词比较时的大小写敏感性?

38

我正在开发一个VBA程序,它可以允许用户输入地址并通过将地址元素与数据库匹配来查找位置。

不幸的是,我一直遇到大小写敏感的问题。

例如,当我使用此代码时:

For i = 11 To lRowB
Range("B" & i).Activate
myResult = IsNumeric(Application.Match(ActiveCell.Value, manilaListRange, 0))

它将比较活动单元格的值与我的数据库中的单词列表进行比较。问题是,如果在我的活动单元格中,单词为“miami”或“MIAMI”,而数据库中仅有“Miami”,那么它将不能正常工作...

另一个例子:

If Range("J6").Value = "tawi" Then
Range("J6").Value = "Tawi-Tawi"
End If

同样的问题,只有使用相同大小写的单词才能正常工作。

我该如何摆脱这个问题?这特别令人烦恼,而且我不可能在每种情况下都重新编写数据库!


2
应用程序中的.match不区分大小写,因此我认为您有不同的问题。 - JosieP
4个回答

68

在模块级别上,您可以发出一条语句:

Option Compare Text

这将使所有的“文本比较”均不区分大小写。这意味着以下代码将显示消息“this is true”:

Option Compare Text

Sub testCase()
  If "UPPERcase" = "upperCASE" Then
    MsgBox "this is true: option Compare Text has been set!"
  End If
End Sub

例如,查看http://www.ozgrid.com/VBA/vba-case-sensitive.htm。我不确定它能够完全解决所有情况下的问题(比如Application.Match函数),但是它会处理所有的if a=b语句。至于Application.Match - 你可以使用LCase函数将参数转换为大写或小写字母。


1
作为警告,我在尝试查看两个字符串是否相同时使用此方法并未奏效。从文章中我得出的感觉是这种方法更适用于比较文本的小于或大于情况: http://msdn.microsoft.com/en-us/library/8t3khw5f.aspx。我正在处理区分大小写的Salesforce ID,即使设置了Option Compare Text,VBA仍然认为i3vz等于i3vZ。 - rryanp
5
Option Compare Text应该是不区分大小写的,所以你看到的结果是预期的。如果你希望它是区分大小写的(例如,"i3vz""i3vZ"被视为不同),则可以使用Option Compare Binary - Floris
2
啊,我现在明白了,我刚才把他的帖子读反了。太好了 - 我会尝试使用Option Compare Binary - 非常感谢您提供的信息! - rryanp
3
参考 - Application.Match 是不区分大小写的,因此选项 Compare Text 打开或关闭并不重要。 - Selkie

23

您可以将两个值转换为小写并进行比较。

以下是一个示例:

If LCase(Range("J6").Value) = LCase("Tawi") Then
   Range("J6").Value = "Tawi-Tawi"
End If

4
如果要比较的列表很大(例如上面例子中的manilaListRange范围),使用匹配函数是个明智的选择。这样可以避免使用循环而导致程序变慢。如果您可以确保manilaListRange全部为大写或小写,则这似乎是我最好的选择。可以很快地应用'UCase'或'LCase'进行匹配。
如果您无法控制ManilaListRange,那么您可能需要通过循环来遍历该范围,在这种情况下,有许多方法可以进行比较,如'search'、'Instr'、'replace'等。

1
这有点取巧,但可以完成任务。
Function equalsIgnoreCase(str1 As String, str2 As String) As Boolean
    equalsIgnoreCase = LCase(str1) = LCase(str2)
End Function

1
这根本不是黑客攻击。但你所做的只是在五年后重复了Vasanth的答案。 - Excel Hero
@ExcelHero 感谢您的评论,您是正确的,这个想法是一样的,但我的答案增加了更多的价值,因为一旦声明函数,它可以作为 Excel 公式使用。 - MeLean

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接