私は、ユーザーが住所を入力し、住所の要素をデータベースと照合することで場所を見つけることができる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だけが機能します。
どうすればこれを取り除くことができますか?それは特に面倒であり、可能なすべてのケースの組み合わせでデータベースを書き換えることはできません!
前もって感謝します !
モジュールレベルで発行できるステートメントがあります。
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
関数を使用して、引数を大文字または小文字に変換できます。
両方の値を小文字に変換して比較できます。
以下に例を示します。
If LCase(Range("J6").Value) = LCase("Tawi") Then
Range("J6").Value = "Tawi-Tawi"
End If
比較対象のリストが大きい場合(つまり、上記の例のmanilaListRangeの範囲)、match関数を使用するのは賢明な方法です。これにより、手順が遅くなる可能性のあるループの使用が回避されます。 manilaListRangeがすべて大文字または小文字であることを確認できる場合、これは私にとって最良の選択肢のようです。試合をするときに、「UCase」または「LCase」をすばやく適用します。
ManilaListRangeを制御できなかった場合は、この範囲をループする必要があります。この場合、「検索」、「Instr」、「置換」などを比較する多くの方法があります。
それは少しハックですが、タスクを実行します。
Function equalsIgnoreCase(str1 As String, str2 As String) As Boolean
equalsIgnoreCase = LCase(str1) = LCase(str2)
End Function