VBAの比較演算子の使い方|数値・文字列・日付の比較とAnd・Or・Likeの活用

VBAの比較演算子は6種類(= < > <= >= <>)で、If文の条件部分に使います。AndやOrと組み合わせると複数条件も書けます。文字列・日付・空白チェックなど実務でよく使うパターンを覚えておくと、条件分岐がスムーズに書けるようになります。

この記事では、次の内容を順番に解説します。

  • 比較演算子6種類の一覧と使い方
  • 数値・文字列・空白の比較例
  • And・Or・Notを使った複数条件の書き方
  • 日付の比較方法
  • Like演算子を使った部分一致の判定

比較演算子6種類を確認するには?

VBAの比較演算子は次の6種類です。算数の記号とほぼ同じですが、「以上」「以下」「等しくない」の書き方が異なります。

演算子意味結果
=等しい5 = 5True
<>等しくない5 <> 3True
<より小さい(未満)3 < 5True
>より大きい(超える)5 > 3True
<=以下(その値を含む)5 <= 5True
>=以上(その値を含む)5 >= 3True

「未満」と「以下」の違い:< は「その値を含まない(未満)」、<= は「その値を含む(以下)」です。例えば80点を合格とする場合、「80点以上なら合格」は >= 80、「80点より大きければ合格」は > 80 になります。

数値を比較するには?

Sub CompareNumbers()
    Dim score As Long
    score = 75

    ' 以上・未満で分岐
    If score >= 80 Then
        MsgBox "優"
    ElseIf score >= 60 Then
        MsgBox "良"
    ElseIf score >= 40 Then
        MsgBox "可"
    Else
        MsgBox "不可"
    End If
End Sub

セルの値と比較する場合も同様です。

' A2セルの値が10より大きければ処理する
If Cells(2, 1).Value > 10 Then
    MsgBox "10より大きいです"
End If

' A2セルの値が0以上100以下かチェック
If Cells(2, 1).Value >= 0 And Cells(2, 1).Value <= 100 Then
    MsgBox "有効な範囲です"
End If

文字列を比較するには?

文字列の比較は =<> を使います。大文字・小文字は区別されます。

' 文字列が一致するか確認
If Cells(2, 1).Value = "完了" Then
    MsgBox "完了しています"
End If

' 文字列が一致しないか確認
If Cells(2, 1).Value <> "未着手" Then
    MsgBox "未着手ではありません"
End If

注意:大文字・小文字の区別について

VBAのデフォルトでは大文字・小文字を区別します。"OK""ok" は別のものとして扱われます。大文字・小文字を区別せずに比較したい場合は LCaseUCase で統一してから比較します。

' 大文字・小文字を区別せずに比較する
If LCase(Cells(2, 1).Value) = "ok" Then
    MsgBox "OKです(大文字小文字不問)"
End If

空白セルを判定するには?

空白かどうかの確認は実務で非常によく使います。3種類の書き方があります。

' 方法①:空文字と比較する(最も一般的)
If Cells(2, 1).Value = "" Then
    MsgBox "空白です"
End If

' 方法②:空白でないことを確認
If Cells(2, 1).Value <> "" Then
    MsgBox "何か入っています"
End If

' 方法③:IsEmpty関数を使う(セルが完全に空のとき)
If IsEmpty(Cells(2, 1)) Then
    MsgBox "空白です"
End If

= ""IsEmpty の違い:スペースだけが入っているセルは IsEmpty では False になりますが = "" でも False になります。スペースも空白として扱いたい場合は Trim(Cells(2,1).Value) = "" を使いましょう。

複数条件を組み合わせるには?(And・Or・Not)

複数の条件をまとめて判定するには AndOrNot を使います。

演算子意味True になる条件
Andかつ両方の条件がTrue
Orまたはどちらか一方がTrue
Notでない条件がFalseのとき
' And:両方の条件を満たすとき
If Cells(2, 1).Value >= 60 And Cells(2, 2).Value = "提出済" Then
    MsgBox "合格かつ提出済みです"
End If

' Or:どちらかの条件を満たすとき
If Cells(2, 1).Value = "東京" Or Cells(2, 1).Value = "大阪" Then
    MsgBox "東京か大阪です"
End If

' Not:条件を反転させる
If Not Cells(2, 1).Value = "完了" Then
    MsgBox "完了していません"
End If
' ↑ これは Cells(2,1).Value <> "完了" と同じ意味

注意:And・Orを組み合わせる場合は括弧で明示する

' 意図が不明瞭な書き方
If A = 1 Or B = 2 And C = 3 Then  ' AndがOrより優先されるため意図と違う動作になることがある

' 括弧で優先順位を明示する
If (A = 1 Or B = 2) And C = 3 Then  ' こちらが推奨

日付を比較するには?

日付の比較は数値と同じ演算子で行えます。VBAでは日付を # で囲んで表記します。

' 今日より前かどうかを確認
If Cells(2, 1).Value < Date Then
    MsgBox "過去の日付です"
End If

' 特定の日付以降かどうかを確認
If Cells(2, 1).Value >= #2025/04/01# Then
    MsgBox "2025年4月1日以降です"
End If

' 今月かどうかを確認
If Year(Cells(2, 1).Value) = Year(Date) And _
   Month(Cells(2, 1).Value) = Month(Date) Then
    MsgBox "今月のデータです"
End If

部分一致で判定するには?(Like演算子)

「〇〇を含む」「〇〇で始まる」といった部分一致の判定には Like 演算子を使います。

' 「株式会社」を含む文字列かどうか(前後に*でワイルドカード)
If Cells(2, 1).Value Like "*株式会社*" Then
    MsgBox "株式会社が含まれています"
End If

' 「東京」で始まる文字列かどうか
If Cells(2, 1).Value Like "東京*" Then
    MsgBox "東京で始まります"
End If

' 数字3桁の文字列かどうか(#は任意の1桁数字)
If Cells(2, 1).Value Like "###" Then
    MsgBox "3桁の数字です"
End If
パターン文字意味
*0文字以上の任意の文字列"東京*" → 「東京都」「東京駅」など
?任意の1文字"山?県" → 「山口県」「山形県」など
#任意の1桁の数字"###" → 「123」「456」など

まとめ

  • 比較演算子6種類= <> < > <= >=。If文の条件部分で使う。
  • 文字列の比較=<> を使う。大文字・小文字は区別される。
  • 空白チェック= "" が基本。スペース対策には Trim を組み合わせる。
  • 複数条件And(かつ)・Or(または)・Not(でない)で組み合わせる。複雑な場合は括弧で優先順位を明示する。
  • 日付の比較:数値と同じ演算子が使える。Date 関数で今日の日付を取得できる。
  • Like演算子:部分一致の判定に使う。*(任意の文字列)・?(任意の1文字)・#(任意の1桁数字)が使える。

よくある質問

「以上」と「より大きい」の違いは何ですか?

>=(以上)はその値を含みます。>(より大きい)はその値を含みません。例えば score >= 80 は80点も含んで合格になりますが、score > 80 は80点は含まれず81点以上が合格になります。

文字列の大きさ(<や>)を比較できますか?

できます。文字列に <> を使うと、文字コード順(アルファベット順や五十音順に近い順)で比較されます。例えば "B" > "A" は True になります。ただし日本語の並び順は直感と異なることがあるため、文字列の大小比較は注意が必要です。

AndとOrを同時に使う場合の優先順位はどうなりますか?

VBAでは AndOr より優先されます。例えば A Or B And CA Or (B And C) として処理されます。意図した動作になるよう括弧で優先順位を明示する習慣をつけましょう。

セルの値がNullやエラーの場合に比較するとどうなりますか?

セルが数式エラー(#VALUE!・#N/Aなど)の場合、通常の比較演算子でそのまま比較するとエラーになることがあります。IsError(Cells(行, 列)) でエラーかどうかを先に確認してから比較するのが安全です。

Like演算子で大文字・小文字を区別しないようにできますか?

モジュールの先頭に Option Compare Text と記述すると、Like 演算子の比較が大文字・小文字を区別しなくなります。デフォルトは Option Compare Binary(区別する)です。


動画で学びたい方へ

「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。

VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール