『Excel VBA 表計算とプログラミング学習サイト』では、アフィリエイトプログラムを利用して商品を紹介しています。

【VBA】StrCompの使い方

この記事では VBA で大文字と小文字を同じものとして判定する比較方法について解説します。

【VBA】StrComp関数

さっそくですけど、次のマクロを実行してみてくださいな。

'[VBA] Bynaryモードで文字列を比較

Sub CompareWords()

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

  mystr1 = "KOBATO"
  mystr2 = "kobato"

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

  Debug.Print bool

End Sub

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

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

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

'[VBA] Textモードで文字列を比較(1)

Sub TextMode_1()

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

  mystr1 = "KOBATO"
  mystr2 = "kobato"

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

  Debug.Print bool

End Sub

'TextMode_1()の実行結果:
'0

TextMode_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 に入れます
  bool = StrComp(mystr1, mystr2, vbTextCompare)

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

End Sub

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

コメント