[VBA] Text モードで文字列を比較します (StrComp関数)

 今回は 大文字と小文字を同じものとして判定する比較方法 について解説します。
 さっそくですけど、次のマクロを実行してみてくださいな。

'VBA Bynaryモードで文字列を比較するプロシージャ

Sub Compare_Words()

  Dim tf As Boolean
  Dim mystr1 As String
  Dim mystr2 As String

  mystr1 = "KOBATO"
  mystr2 = "kobato"

  'mystr1=mystr2の真偽を変数に入れます
  tf = mystr1 = mystr2

  Debug.Print tf

End Sub

 「KOBATO」と「kobato」を比較させて、その真偽を返すように書かれたマクロなのですけど、結果は False(偽)と表示されます。つまり、VBA の既定では「大文字と小文字」を異なるデータとして判定するのです。同じように既定では「全角と半角」、「ひらがなとカタカナ」も異なる文字列として判定されます。このような比較方法を Bynary モード とよびます。でもマクロによっては、これらを同じものとして扱ったほうが便利なこともあります。「大文字と小文字」「全角と半角」「ひらがなとカタカナ」を同じものとして判定する比較方法を Text モード といいます。
 

StrCompを使ってTextモードで文字列を比較します

 StrComp 関数 は2つの文字列を比較して結果を数値または Null 値で返します。

=StrComp(文字列1, 文字列2 [,比較モード])

 3つめの引数 [比較モード] を 1 または vbTextCompare で指定すると、Text モードの比較になります。2つの文字列が等しいときは 0 (True), 異なるときは 1 (False) が返ります。ちなみに StrComp は String Compare の略です。先ほどのマクロをちょっとだけ書き変えてみます。

'VBA Textモードで文字列を比較するプロシージャ-1

Sub Text_Mode_1()

  Dim tf As Variant
  Dim mystr1 As String
  Dim mystr2 As String

  mystr1 = "KOBATO"
  mystr2 = "kobato"

  'mystr1 と mystr2 の比較結果を tf に入れます
  tf = StrComp(mystr1, mystr2, vbTextCompare)

  Debug.Print tf

End Sub

 Text_Mode_1() を実行すると 0 が戻ります。つまり「KOBATO」と「kobato」は同じ文字列であると判定されたわけです。最後にユーザーさんが好きな単語を入力して、それが同じであるかどうかを判定するマクロを作ってみます。

'VBA Textモードで文字列を比較するプロシージャ-2

Sub Text_Mode_2()

  Dim tf As Variant
  Dim mystr1 As String
  Dim mystr2 As String

  mystr1 = InputBox("1つめの単語を入れてね")
  mystr2 = InputBox("2つめの単語を入れてね")

  'mystr1 と mystr2 の比較結果を tf に入れます
  tf = StrComp(mystr1, mystr2, vbTextCompare)

  If tf = 0 Then
    MsgBox "同じ単語だよ"
  Else
    MsgBox "違う単語だよ"
  End If

End Sub

 Text_Mode_2() を実行すると単語の入力が促されるので、たとえば全角、半角で「コバト」「コバト」と入れると「同じ単語だよ」というメッセージが返ります。「コバト」「コトバ」と入れると「違う単語だよ」というメッセージが返ります ... 当たり前だけですけどね。たまに間違える人がいるんですよね。「ことばさん」てね。そのたびに「こ・ば・とです!」とはっきり訂正するんだけど、同じ人から届いた挨拶状にやっぱり「ことばさん」て書いてあるのを見たときは「きききい!」てなりましたよ。

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)