VBAの文字列の比較 – StrComp
VBAでは、StrComp関数を使用して2つの文字列を比較することができます。このチュートリアルでは、この関数をさまざまな比較方法で使用する方法を学びます。
VBAのLike演算子を使って不正確な一致を比較する方法が知りたい場合は、ここをクリックしてください:VBAのLike演算子
比較演算子の使い方を知りたい方は、こちらをご覧ください:VBAの比較演算子 – Not Equal to & More
StrComp関数を使用して2つの文字列を比較する
StrComp関数は、2つの文字列と比較方法を引数として受け取ります。比較の方法は3つあります。
- vbBinaryCompare – 2つの文字列をバイナリで比較します。(大文字と小文字を区別します。)
- vbTextCompare – 2つの文字列をテキストで比較します。(大文字と小文字を区別しません。)
- vbDatabaseCompare – このメソッドは、Microsoft Accessでのみ利用可能で、VBAでは利用できません。
デフォルトでは、この関数はバイナリ方式を使用します。つまりこの引数を省略すると、この関数は大文字と小文字を区別します。
この関数は以下の結果を返します。
- 0 – 文字列が等しい場合
- -1 – 文字列1が文字列2より小さい場合
- 1 – 文字列1が文字列2より大きい場合
- Null – 文字列のいずれかが空である場合
以下はそのコード例です。
Dim intResult As Integer
intResult = StrComp("Computer", "Computer")
この例では、文字列“Computer”と“Computer”が等しいかどうかを、デフォルトの比較方法(バイナリ)を使用して確認し、結果がintResult変数に格納されます。画像でわかるように、両方の文字列は等しいので、intResultの値は0になります。
画像1. VBAでバイナリ方式とStrComp関数を使う
バイナリ方式とテキスト方式でStrComp関数を使用する
ここで、バイナリ方式とテキスト方式の使い分けを確認します。バイナリ方式では、各文字に2進数が割り当てられているので、大文字と小文字は別の文字となります。一方、テキスト方式では、「S」と「s」を同じ文字と見なします。大文字と小文字を区別しない関数にしたい場合は、第3引数にvbBinaryCompareを設定する必要があります。以下はそのコードです。
Dim intResult1 As Integer
Dim intResult2 As Integer
intResult1 = StrComp("Computer", "CompuTer")
intResult2 = StrComp("Computer", "CompuTer", vbTextCompare)
文字列“Computer“と“CompuTer “を、両方式を使って比較してみましょう。
intResult1という変数にはバイナリ方式による値が、intResult2にはテキスト方式による値が格納されます。ローカルウィンドウでこの2つの変数の値を見ることができます。
画像2. StrComp関数をバイナリメソッドとテキストメソッドで使用した場合
intResult1の値は1であり,バイナリ方式では2つの文字列が異なることを意味します。テキスト方式の場合、この2つの文字列は等しいので、intResult2の値は0となります。