web-dev-qa-db-ja.com

VBAでは、単語を比較するときに大文字と小文字を区別しますか?

私は、ユーザーが住所を入力し、住所の要素をデータベースと照合することで場所を見つけることができるVBAプログラムに取り組んでいます。

残念ながら、大文字と小文字の区別に関する問題が繰り返し発生しています。

たとえば、このコードを使用している場合:

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

アクティブセルの値をデータベースの単語リストと比較します。問題は、アクティブなセルでWordが「miami」または「MIAMI」であり、「Miami」のみがデータベースにある場合、機能しないことです...

他の例:

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

同じ問題、同じケースで書かれたWordだけが機能します。

どうすればこれを取り除くことができますか?それは特に面倒であり、可能なすべてのケースの組み合わせでデータベースを書き換えることはできません!

前もって感謝します !

30
Phalanx

モジュールレベルで発行できるステートメントがあります。

Option Compare Text

これにより、すべての「テキスト比較」で大文字と小文字が区別されなくなります。これは、次のコードが「これは本当です」というメッセージを表示することを意味します。

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関数を使用して、引数を大文字または小文字に変換できます。

54
Floris

両方の値を小文字に変換して比較できます。

以下に例を示します。

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

比較対象のリストが大きい場合(つまり、上記の例のmanilaListRangeの範囲)、match関数を使用するのは賢明な方法です。これにより、手順が遅くなる可能性のあるループの使用が回避されます。 manilaListRangeがすべて大文字または小文字であることを確認できる場合、これは私にとって最良の選択肢のようです。試合をするときに、「UCase」または「LCase」をすばやく適用します。

ManilaListRangeを制御できなかった場合は、この範囲をループする必要があります。この場合、「検索」、「Instr」、「置換」などを比較する多くの方法があります。

4
dra_red

それは少しハックですが、タスクを実行します。

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