2017-07-20 12 views
1

私はこの1ヶ月間(仕事のために)VBAを使用していました。この言語/スクリプトを使用し始めて以来、は、文字列を比較する問題が発生しています。 ..私は、 VEの比較文字列これまで次のとおりVBAの文字列を比較する最も良い方法は?

  • STR1 = STR2STR1 <> STR2
  • StrComp関数(STR1、STR2、comparisonMethod)
  • InStr関数(STR1、STR2)は

時には、これらの比較方法の一つ、を使用する前に、私は最初のUCase関数(STR1)、あるいはUCase関数(トリム(STR1))を適用します。これまでの経験から、の文字列をVBAで比較すると、矛盾した結果が出るような気がするので、ちょっと変なことになります。

QUESTION: VBAで2つの文字列を比較するために最良の手順は何ですか?

ありがとうございます!

EDIT:例については私のコメントを参照してください。

+1

InStr(ともその対応InstrRevが)option compare設定を使用していることに注意してくださいメソッドが期待した結果を返さないことを確認します。 – jonathana

+0

A = Bは、AとBが同じ場合で、同じ(存在する場合)同じ空白がある場合は100%の信頼性があります。これらの2つの事実が常に正しいことを忘れないでください。 –

+0

例:2つのリストがあるとします.1つのリストにはラップトップモデルが含まれ、もう1つには部品番号が含まれています。目標は、すべての部品番号をモデルに関連付けることです。私の結果は、部分的な関連付けのみを生成します。つまり、モデルに関連付ける必要がある10の部品番号がある場合、実際には5または6だけが存在します。私は適切な比較をしていない文字列を別のコードで再度比較し、正しい結果を得ます。このような行動は、私がVBAを使用している間はやや矛盾がなく、「感情」の原因となっています。 – Charles

答えて

3

最初の質問は、大文字と小文字を区別するかどうかを区別したい場合です。つまり、他の単語は"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 -functionは、同じ結果を取得しますが、MODULの上部に比較オプションを設定する必要はありません。代わりに、あなたは、パラメータとして比較するための所望の方法与えることができます: - それは私が知っている任意のプログラミング言語でケースだあなたは、文字列に空白を先頭または末尾いる場合

sub foo3 
    Debug.Print StrComp("ABC", "abc", vbBinaryCompare) = 0  ' <-- Prints "False" 
    Debug.Print StrComp("ABC", "abc", vbTextCompare) = 0  ' <-- Prints "True" 
end sub 

を、あなたは常にtrimを使用する必要があります。

Instrを使用すると、2つの文字列が同一であるかどうかを確認することはかなり悪い考えです。部分文字列検索を使用することができます。 (?)どのようにあなたは、このような「バイナリ」の事を感じることができ、例を追加してください - 「私は一貫性のない結果を得るように私は感じる」

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 
関連する問題