こんにちは、Ryoです。
入力される文字列としては「全角/半角」、「大文字/小文字」、「ひらがな/かたかな」がありますが、それらを区別したい場合と区別したくない場合が用途によっては様々だと思います。今回はそのようなケースで利用できる文字列比較を行うStrComp関数について書いていこうと思います。
1.サンプル概要
StrComp関数は引数に指定した文字列2つを比較しますが、その比較モードにはバイナリモードとテキストモードがあります。バイナリモードは「全角/半角」、「大文字/小文字」、「ひらがな/かたかな」を区別しますが、テキストモードは区別しません。
その区別状況を確認する目的で、簡易的な表を以下の通り作成しています。
Binary/Textモードでそれぞれサンプルコードを実行した結果は次の通りです。
2つの文字列をそれぞれのモードで比較判定すると、バイナリモードは完全一致以外はNG(等しくない)となり、テキストモードは区別しないので全てOK(等しい)という結果になります。
以上がサンプル概要になります。
2.サンプルコード
Sub Sample1() Dim i As Integer '***バイナリモード比較*** For i = 2 To 6 '「vbBinaryCompare」⇒平仮名/片仮名、全角/半角、 ' 大文字/小文字を区別する If StrComp(Cells(i, 1).Value, Cells(i, 2).Value, _ vbBinaryCompare) = 0 Then Cells(i, 3).Value = "等しい" Else Cells(i, 3).Value = "等しくない" '等しくない判定の際はフォントカラーを赤にする Cells(i, 3).Font.Color = RGB(255, 0, 0) End If Next i '***テキストモード比較*** For i = 9 To 13 '「vbTextCompare」⇒vbBinaryCompareのような区別はしない If StrComp(Cells(i, 1).Value, Cells(i, 2).Value, _ vbTextCompare) = 0 Then Cells(i, 3).Value = "等しい" Else Cells(i, 3).Value = "等しくない" Cells(i, 3).Font.Color = RGB(255, 0, 0) End If Next i End Sub
このサンプルコードをサンプル概要で示した表と合わせて実行すればA列とB列の対象文字列を比較判定し、結果をC列の対象セルに出力します。
このように2つの文字列を比較するにはStrComp関数を利用して処理を行います。
構文:StrComp(string1,string2[,compare])
StrComp関数は、引数String1と引数String2に指定した文字列を引数compareに指定する比較モード(定数)に応じて比較し結果を返します。
引数compareに指定する定数には「vbBinaryCompare(バイナリモード)」、「vbTextCompare(テキストモード)」があり、それらを指定して比較します。他には「vbDatabeseCompare(アクセス)」もありますが、ここでは割愛します。
StrComp関数の処理結果としては「string1<string2」で「-1」、「string1=string2」で「0」、「string1>string2」で「1」となります。これは文字コードや五十音順での順番を元にstring1とstring2での比較結果を表しています。
以上が2つの文字列を比較するStrComp関数を利用したサンプルコードになります。
3.まとめ
入力された文字列が不規則な場合は半角小文字等に統一してから処理を行ったりしますが、その入力時点での文字列自体に対して合否を判定しようとする場合などは有用な気がしますので、知っておくと役に立つ場面も多いと思います。
以上、2つの文字列を比較し判定(区別)する方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo