本ページには広告が含まれています。

Excel VBA StrComp関数 文字列の比較結果を返す

Excel VBA StrComp関数 文字列の比較結果を返す アイキャッチ

Excel VBAの「StrComp 関数」について解説します。

スポンサーリンク

StrComp 関数とは

Excel VBA の StrComp 関数とは、二つの文字列を比較して結果を数値で返します

返された数値が 0 なら等しい0 以外なら等しくないということです。

StrComp 関数(Visual Basic for Applications リファレンス)

スポンサーリンク

構文(引数と戻り値)

Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。

構文

StrComp(string1, string2[, compare ])

引数

引数 説明
string1【必須】任意の文字列(式)を指定します
string2【必須】任意の文字列(式)を指定します
compare【省略可能】比較するモードを指定します
※省略時の規定はバイナリモード(0)です。
string1 または string2 に Null が含まれていた場合 Null が返されます

[compare] 比較モード

定数説明
vbBinaryCompare0バイナリモードで比較します【省略時の既定モード】
大/小文字、全/半角、ひらがな/カタカナを区別します。
vbTextCompare1テキストモードで比較します
大/小文字、全/半角、ひらがな/カタカナを区別しません。
※ vbUseCompareOption(-1)と vbDatabaseCompare(2)という設定もありますが、まず使用することは無いと思いますので説明を省略しています。

戻り値

StrComp 関数の戻り値は次のとおりです。

比較結果StrComp が戻す値
string1string2等しい0
string1string2 より 小さい-1
string1string2 より 大きい1
string1 または string2Null Null
※ 戻り値のデータ型は Integer です。

比較結果の戻り値が 0 なら等しい0 以外なら等しくないということです。

文字列の比較は先頭から1文字づつ比較していき、相違した文字の文字コードの比較で「小さい(-1)」「大きい(1)」を判定しています。

解説(使用例)

簡単なサンプルコードを作成して使用例を解説します。

StrComp 関数 サンプル

StrComp 関数の動作がわかる簡単なサンプルを見てみましょう。

文字列の比較モードによる違いを表示する

'■StrComp関数の比較モードを確認する
Sub StrComp_Sample01()
  Dim a As String, b As String
  Dim bc As Integer, tc As Integer
  '▼比較文字列を各変数に代入
  a = "JAPAN": b = "japan"
  GoSub res   '比較サブルーチンへ分岐
  a = "JAPAN": b = "Japan"
  GoSub res
  a = "ニッポン": b = "ニッポン"
  GoSub res
  a = "ニッポン": b = "にっぽん"
  GoSub res
  Exit Sub
'▼StrComp各比較モードで実行して結果を比較表示
res:
  bc = StrComp(a, b)    'バイナリモード比較
  tc = StrComp(a, b, 1) 'テキストモード比較
  Debug.Print a & " と " & b & " の比較結果は"
  Debug.Print "バイナリモードでは:" & bc
  Debug.Print "テキストモードでは:" & tc _
              & vbCrLf
  Return    '元の場所へ復帰
End Sub

実行結果の イミディエイト 画像がこちらです。

StrComp_Smple01 実行結果イミディエイト画像

▼比較する文字列を各変数に代入します

・6行目、変数 a に “JAPAN” 、変数 b に “japan” を代入しています。

・8行目、10行目、12行目も同じようにそれぞれの変数に文字列を代入させています。

・7行目、GoSub…Returnステートメントで 16行目の res: 行へ処理を分岐させています。

▼StrComp各比較モードで実行して結果を比較表示

・17行目、StrComp関数のバイナリモード(既定)で文字列を比較して変数 bc に戻り値を入れています。

・18行目、StrComp関数のテキストモード(compare=1)で文字列を比較して変数 tc に戻り値を入れています。

・19~22行目で、結果を Debug.Print 表示しています。上の結果画像を参照ください。

・23行目は、Return で分岐元の場所へ処理を戻しています。

テキストモードでは、文字種が違っていても同一とみなされてしまうことが確認できます。

文字列内の全文字を比較するサンプル

文字列比較では、最初に相違した部分の文字コードで返される値が決まります。StrComp 関数はその結果を返して終了しますが、どの部分が相違していたのかはわかりません。

そこで次のサンプルは、文字列を一文字づつ比較して何文字目がどのように相違しているのかを表示します。

'■文字列内の全文字を比較して結果を表示するサンプル
Sub StrComp_Sample02()
  Dim a As String, b As String, res As String
  Dim i As Integer
  Dim n As Long, m As Long
  '▼比較文字列を各変数に代入
  a = "ABCD"
  b = "AbCdE"
  '▼文字列数の最大値取得
  m = WorksheetFunction.max(Len(a), Len(b))
  '▼先頭から1文字づつ比較して結果を保存
  For n = 1 To m
    i = StrComp(Mid(a, n, 1), Mid(b, n, 1))
    If i <> 0 Then
      res = res & n & "番目の文字:" & _
        Mid(a, n, 1) & "<>" & Mid(b, n, 1) & vbCrLf
    End If
  Next
  '▼比較結果をMsgBoxで表示
  If res <> "" Then
    MsgBox "文字列「" & a & "」と" & vbCrLf & _
    "文字列「" & b & "」は" & vbCrLf & _
    "次の文字が相違しています" & vbCrLf & res
  Else
    MsgBox "文字列「" & a & "」と" & vbCrLf & _
    "文字列「" & b & "」は" & vbCrLf & _
    "文字相違はありませんでした!"
  End If
End Sub

実行結果の MsgBox 画像です。

StrComp_Smple02 実行結果MsgBox画像

▼比較文字列を各変数に代入

・7行目、8行目で、比較したいそれぞれの文字列を各変数 a , b に代入しています。

▼文字列数の最大値取得

・10行目、m = WorksheetFunction.max(Len(a), Len(b)) は、ワークシート関数の Max を使ってそれぞれの文字数の最大値を取得しています。この値がループ処理の最終値になります。

▼先頭から1文字づつ比較して結果を保存するループ処理

・13行目で、StrComp 関数に各文字列の先頭から1文字づつ比較させています。Mid 関数で1文字づつ文字を取り出していく設定です。戻り値を変数 i に代入します。

・14~17行目では、文字比較の戻り値 i の値で処理を分岐させます。i = 0 の場合は「同一」なので処理をしません。i <> 0 の場合、レスポンス用の変数 res に結果を書き込んでいく設定です。

▼比較結果をMsgBoxで表示

・20~28行目は、比較結果を MsgBox で表示する設定です。20行目で res が空白だった場合は 25 行目の MsgBox、res がある場合は 25 行目の MsgBox(コード下の画像)を表示します。

実行結果で相違が無かった場合の MsgBox サンプル画像がこちらです。

比較結果が相違なしのMsgBox画像

おわりに

Excel VBA StrComp 関数で二つの文字列を比較してその結果を返す方法について解説しました。

比較結果の戻り値が 0 なら等しい0 以外なら等しくないということです。

比較は文字列の先頭から比較していった最初の文字の文字コードを比較する仕様となっています。

StrComp 関数の戻り値からは、どの文字が相違していたのかは判断できません。

記事内に提示したサンプルコードでは、文字列のすべての文字同士を StrComp 関数で比較して、何番目のどの文字で相違していたのかがわかります。

このように、関数単独では把握できない情報も、他の関数やステートメントを VBA でうまく組み合わせて使うことによって取得させることができます。

以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;

VBAの関数一覧はこちらです。

スポンサーリンク
スポンサーリンク

VBAサンプルファイルダウンロードページのご案内

このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。

ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!