在比较单词时,VBA摆脱了区分大小写?

时间:2013-06-11 02:30:08

标签: excel vba excel-vba case-sensitive

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

不幸的是,我在案例敏感性方面经常遇到问题。

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

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

它会将活动单元格的值与我的数据库中的单词列表进行比较。问题是,如果在我的活动单元格中,单词是“miami”或“MIAMI”,只有“迈阿密”在数据库中,它将无法正常工作......

其他例子:

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

同样的问题,只有用相同案例写的字才会起作用。

我怎样摆脱这个?这特别烦人,我不能在每种情况下都可以重写我的数据库!

提前致谢!

4 个答案:

答案 0 :(得分:51)

您可以在模块级别发布声明:

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 :(得分:17)

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

以下是一个例子:

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

答案 2 :(得分:3)

如果要比较的列表很大(即上例中的manilaListRange范围),则使用匹配函数是一个聪明的举动。它避免使用可能减慢程序的循环。如果你能确保manilaListRange都是大写或小写,那么这对我来说似乎是最好的选择。它可以快速应用' UCase'或者' LCase'当你做你的比赛。

如果您无法控制ManilaListRange,那么您可能不得不求助于此范围的循环,在这种情况下,有很多方法可以比较“搜索”,“#Ins;'”, '替换'等。

答案 3 :(得分:0)

有点hack,但是可以完成任务。

Function equalsIgnoreCase(str1 As String, str2 As String) As Boolean
    equalsIgnoreCase = LCase(str1) = LCase(str2)
End Function