こんにちは、ぐーです!
「Excel上では『Apple』も『apple』も同じリンゴなのに、VBAで処理しようとすると別物として扱われてしまう……。」
毎日大量のデータを処理していると、一度はこのような経験をされたことがあるのではないでしょうか?
人間なら「同じもの」と直感的に判断できることでも、コンピュータの世界では「A」と「a」は全く異なるデータとして厳密に区別されます。
今回は、そうした「表記のゆれ」を柔軟に吸収して比較してくれる便利な関数、StrComp関数をご紹介します。この関数をマスターするだけで、データ照合や比較作業に伴うストレスが大幅に軽減されるはずです。
なぜ「=」による比較では不十分なのでしょうか?
通常、VBAで文字列を比較する際は「=」演算子を使用します。
If "Apple" = "apple" Then
MsgBox "同じです"
Else
MsgBox "違います"
End If
これを実行すると、「違います」と表示されます。
VBAの標準的なルール(バイナリ比較)では、大文字と小文字は「異なる文字」として識別されるためです。
しかし、実務においては「入力のばらつきに関わらず、同じ単語として扱いたい」というケースがほとんどではないでしょうか。そこで非常に役立つのが、StrComp関数です。
StrComp関数の記述方法
書き方はとてもシンプルです。
StrComp(文字列1, 文字列2, [比較モード])
この「比較モード」の設定によって、判定の厳格さをコントロールできるのが最大の特徴です。
- vbBinaryCompare(0):バイナリ比較。大文字・小文字を厳密に区別します(Aとaは別物)。
- vbTextCompare(1):テキスト比較。大文字・小文字、さらに半角・全角の差も無視して「同じ文字」として判定します。
【実践】コピペで使える比較コード
実際に「大文字・小文字」や「半角・全角」の違いを無視して比較するコードを確認してみましょう。
Sub CheckString()
Dim text1 As String
Dim text2 As String
Dim result As Integer
' 例:全角のAppleと半角のappleを比較
text1 = "Apple"
text2 = "apple"
' vbTextCompareを使います
' 戻り値が0なら「一致」という意味です
result = StrComp(text1, text2, vbTextCompare)
If result = 0 Then
MsgBox "OK!同じ文字として扱います!"
Else
MsgBox "NG!違う文字です!"
End If
End Sub
これを実行すると、表記が異なっていても「OK!同じ文字として扱います!」と表示されます。
私が初めてこの関数を知った時、ようやくこちらの意図が伝わったような気がして、とても安心したのを覚えています。
戻り値が持つ意味
StrComp関数は、比較結果を以下の数値で返します。
- 0: 一致した
- -1:文字列1が文字列2より小さい(辞書順で前)
- 1:文字列1が文字列2より大きい(辞書順で後)
基本的には「戻り値が0(一致)であるか」という点だけ押さえておけば、実務の大部分において困ることはありません。
まとめ:柔軟な比較で業務をスムーズに
これまで、比較のためにわざわざUCase関数などで文字種をすべて大文字に変換してから照合していた方も多いかもしれません。
今後は StrComp(…, vbTextCompare) を活用することで、よりスマートかつ安全に処理を完結させることが可能です。
機械的な厳密さだけでなく、人間の感覚に合った「柔軟なチェック」を自動化できれば、作成するツールの汎用性と業務の品質はさらに向上します。
ぜひ、今日からの開発に取り入れてみてください!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント