【ExcelVBA・マクロ】StrComp関数の使い方|文字列を比較する方法を完全解説【コピペOK】

StrComp関数の使い方 ExcelVBA

VBAで文字列を扱っていると、次のようなことはありませんか?

  • 2つの文字列が同じか比較したい
  • 大文字・小文字を区別して比較したい
  • 文字列比較を安全に行いたい

このような場合は、StrComp関数を使うことで解決できます。
文字列同士を比較し、結果を数値で返してくれる便利な関数です。

この記事では、StrComp関数の基本から実務での活用方法まで分かりやすく解説します。


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

この記事でできること

  • 文字列比較ができる
  • 大文字・小文字を区別できる
  • 実務で使える比較処理が分かる

StrComp関数とは?

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

比較結果によって次の値を返します。

戻り値意味
0一致
-1文字列1 < 文字列2
1文字列1 > 文字列2
NullどちらかがNull

基本:StrComp関数の使い方

基本構文はこちらです。

StrComp(文字列1, 文字列2, [比較方法])

基本例

MsgBox StrComp("ABC", "ABC")

→ 0(同じ)


一致判定で使う

If StrComp("Excel", "Excel") = 0 Then
    MsgBox "一致しています"
End If

大文字・小文字を区別する

デフォルトでは区別されます。

MsgBox StrComp("ABC", "abc")

→ -1(異なる)


大文字・小文字を区別しない

vbTextCompare を使用します。

MsgBox StrComp("ABC", "abc", vbTextCompare)

→ 0(同じ)


比較方法一覧

定数内容
vbBinaryCompare大文字小文字を区別
vbTextCompare大文字小文字を区別しない

セルの値を比較する

If StrComp(Range("A1").Value, Range("B1").Value) = 0 Then
    MsgBox "同じです"
End If

ログインID比較などで使う

Dim userID As String

userID = InputBox("IDを入力してください")

If StrComp(userID, "admin", vbTextCompare) = 0 Then
    MsgBox "管理者です"
End If

=演算子との違い

通常比較:

If str1 = str2 Then

StrComp:

If StrComp(str1, str2) = 0 Then

StrCompの方が比較方法を細かく制御できます。


実務での活用例

  • ログイン判定
  • データ一致チェック
  • 検索処理
  • 入力値比較

比較処理では非常によく使われます。


注意点

① Nullに注意

どちらかがNullの場合はNullが返ります。

② 戻り値はTrue/Falseではない

0・1・-1で判定します。


安全な書き方(おすすめ)

Dim str1 As Variant
Dim str2 As Variant

str1 = Range("A1").Value
str2 = Range("B1").Value

If Not IsNull(str1) And Not IsNull(str2) Then

    If StrComp(str1, str2, vbTextCompare) = 0 Then
        MsgBox "一致"
    End If

End If

よくあるエラーと対処法

① 一致しない

大文字・小文字の違いを確認してください。

② Nullでエラーになる

IsNullで事前チェックしてください。

③ 戻り値をTrue/Falseと勘違いする

0・1・-1で判定します。

④ コードは正しいのにエラーになる

コピー時に全角文字や特殊文字が混ざることがあります。
その場合は該当行を手入力し直すと解決することがあります。


まとめ

  • StrCompは文字列比較を行う関数
  • 比較方法を指定できる
  • 大文字・小文字制御が可能
  • 実務では比較処理で頻出

StrComp関数を使いこなせるようになると、文字列比較の精度と柔軟性が大きく向上します。
実務では非常に便利なので、ぜひマスターしておきましょう。

スポンサーリンク
スポンサーリンク
ExcelVBA
いがぴをフォローする

コメント

タイトルとURLをコピーしました