StrComp関数:文字列と文字列を比較する

StrComp 関数は Excel VBA で用意されている関数の一つで、引数に指定した 2 つの文字列の大きさを比較し結果を返します。ここでは Excel VBA における StrComp 関数の使い方について解説します。

(Last modified: )

StrComp関数の定義と使い方

StrComp 関数は引数に指定した 2 つの文字列の大きさを比較し、結果を表す数値を返します。

StrComp(string1,string2)

1 番目の引数に指定した文字列と 2 番目の引数に指定した文字数の大きさを比較します。大きさの比較は文字コードの大きさで比較し、 文字列の 1 文字目を比較し同じだった場合は今度は 2 文字目を比較するといった形で比較を行います。

比較した結果として次のいずれかの値を戻り値として返します。

-1  : string1 < string2	
 0  : string1 = string2
 1  : string1 > string2	
Null: string1 または string2 が Null である

文字列1と文字列2が等しい場合は 0 、文字列1が文字列2 より小さければ -1 、大きければ 1 、どちらかが Null の場合は Null が返されます。

次の例を見てください。

Debug.Print StrComp("abc", "ABC")   '1
Debug.Print StrComp("abc", "ace")   '-1
Debug.Print StrComp("abc", "abc")   '0

StrComp 関数を使って 2 つの文字列を比較しています。 1 つ目は最初の文字が異なっているので "a" と "A" の文字コードを比較します。 "a" の文字コードは 97 で "A" の文字コードは 65 のため結果は 1 となります。 2 つ目は最初の文字が同じなので 2 つ目の文字の "b" と "c" の文字コードを比較します。 "b" の文字コードは 98 で "c" の文字コードは 99 なので結果は -1 となります。 3 つ目はすべての文字が等しいので結果は 0 となります。

文字列を比較するときの種類を指定する

文字列の比較するときの比較方法の種類を指定する場合は、省略可能な 3 番目の引数に値を指定します。指定可能な値は次の通りです

定数説明
vbUseCompareOption-1Option Compareステートメントの設定を使用して比較を実行します
vbBinaryCompare0バイナリ比較を実行します
vbTextCompare1テキスト比較を実行します
vbDatabaseCompare2Microsoft Access のみ。 データベース内の情報に基づいて比較を実行します

デフォルトの値は vbBinaryCompare です。なお vbUseCompareOption を指定するとエラーが表示されました。 vbTextCompare を設定すると、大文字と小文字や全角文字と半角文字が異なっていても同じ文字として判定されます。

次の例を見てください。

Debug.Print StrComp("abc", "ABC")   '1
Debug.Print StrComp("abc", "ABC", vbTextCompare)   '0

一つ目は比較方法を指定していないので vbBinaryCompare が指定されたものとみなされます。この場合は大文字と小文字を区別するので結果は 1 です。二つ目は比較方法として vbTextCompare を指定しているので大文字と小文字は区別しません。そのため二つの文字列は同じ文字列とみなされるので結果は 0 となります。

サンプルコード

それでは簡単なサンプルを作成して試してみます。

Option Explicit

Sub StrComp関数()
    Dim i As Integer

    For i = 3 To 6
        Cells(i, 4).Value = StrComp(Cells(i, 2).Value, Cells(i, 3).Value)
        Cells(i, 5).Value = StrComp(Cells(i, 2).Value, Cells(i, 3).Value, vbTextCompare)
    Next i
End Sub

StrComp関数の定義と使い方(1)

このプログラムを実行すると StrComp 関数を使って B 列の文字列と C 列の文字列を比較します。 D 列はデフォルトの vbBinaryCompare で比較した場合、 E 列は vbTextCompare を指定して比較した場合の結果を表示しています。 vbTextCompare を指定した場合はひらがなとカタカナの区別も行いません。

StrComp関数の定義と使い方(2)

"東京都港区" と "東京都渋谷区" の結果が vbBinaryCompare の場合と vbTextCompare の場合で反対になる理由は分かりませんでした。

-- --

Excel VBA における StrComp 関数の使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。