VBAの比較演算子・論理演算子の使い方完全ガイド!初心者でも条件分岐が書ける
生徒
「先生、条件分岐の If 文はわかりましたが、もっと複雑な条件、例えば『80点以上かつ出席率が100%の人』みたいな条件はどう書けばいいんですか?」
先生
「それは便利な方法がありますよ。VBAでは 『比較演算子』 と 『論理演算子』 を組み合わせることで、複雑な条件を自由自在に作ることができます。」
生徒
「演算子……なんだか数学みたいで難しそうですね。」
先生
「記号の意味さえ覚えてしまえば簡単です!パソコンに詳しくない方でもわかるように、身近な例えで解説していきますね。」
1. 比較演算子とは?値を比べる基本の記号
Excel VBA(エクセル・ブイビーエー)の比較演算子(ひかえんざんし)とは、二つの値を比べて「正しい(True)」か「正しくない(False)」かを判断するための記号です。
算数で習った「より大きい(>)」や「等しい(=)」のことだと思えば大丈夫です。VBAでは、条件分岐の If 文の中でよく使われます。まずは、どのような種類があるのか一覧を見てみましょう。
| 記号 | 読み方 | 意味 |
|---|---|---|
| = | 等しい | 左と右が同じ値である |
| <> | 等しくない | 左と右が違う値である |
| > | より大きい | 左が右よりも大きい(右は含まない) |
| < | より小さい | 左が右よりも小さい(右は含まない) |
| >= | 以上 | 左が右と同じか、大きい |
| <= | 以下 | 左が右と同じか、小さい |
2. 「等しくない(<>)」の使い方をマスターしよう
比較演算子の中で、初心者が一番間違いやすいのが「等しくない(不等号)」を表す <> です。数学では「≠」を使いますが、キーボードにはその記号がないため、小なり(<)と大なり(>)を背中合わせにして表現します。
例えば、「もし入力された文字が『未完』でなければ、処理を進める」といった場合に使います。
Sub CheckStatus()
Dim status As String
status = "完了"
' ステータスが「未完」ではないとき
If status <> "未完" Then
MsgBox "この作業は進めても大丈夫です!"
End If
End Sub
このように、「〜ではない」という条件を作りたいときは <> を使いましょう。これだけで条件分岐の幅が大きく広がります。
3. 以上・以下・より大きい・より小さいの境界線
数値を扱うときに重要なのが、「その数字を含むかどうか」です。パソコンに慣れていない方は、ここを曖昧にすると計算ミスに繋がります。
- 「以上(>=)」と「以下(<=)」: その数字も「当たり」に含まれます。
- 「より大きい(>)」と「より小さい(<)」: その数字は「当たり」に含まれません。
Sub AgeCheck()
Dim age As Integer
age = 20
' 20以上かどうか(20歳も含まれる)
If age >= 20 Then
MsgBox "あなたはお酒が飲めます。"
End If
' 20より大きいかどうか(20歳は含まれない)
If age > 20 Then
MsgBox "あなたは21歳以上ですね。"
End If
End Sub
Excelの自動化プログラムを作るときは、「境界線の数字をどっちに入れたいか」を常に意識することが大切です。
4. 論理演算子とは?条件を繋げる接着剤
次に、さらに高度な条件を作るための論理演算子(ろんりえんざんし)について学びましょう。論理演算子は、複数の比較条件をくっつける「接着剤」のような役割をします。
よく使うのは次の3つです。これを覚えるだけで、Excel VBAの自動化がぐっと実用的になります。
And(アンド)
「かつ」という意味。全ての条件が正しいときだけ「当たり」になります。
Or(オア)
「または」という意味。どれか一つでも条件が正しければ「当たり」になります。
Not(ノット)
「〜ではない」という意味。条件をひっくり返します。
5. Andを使って「全ての条件を満たす」判定をする
And(アンド)は、複数の条件が全て「Yes(True)」である必要があるときに使います。例えば、「テストが80点以上」で、かつ「出席が20日以上」の両方を満たした人だけにボーナスを出すといった場合です。
Sub BonusCheck()
Dim score As Integer
Dim attendance As Integer
score = 85
attendance = 25
' 点数が80以上、かつ、出席が20以上のとき
If score >= 80 And attendance >= 20 Then
MsgBox "ボーナス支給対象です!"
Else
MsgBox "対象外です。"
End If
End Sub
もし、点数が100点でも出席が5日しかなければ、この If 文の結果は「ハズレ(False)」になります。非常に厳しい判定ですね。
6. Orを使って「どれか一つでも満たす」判定をする
Or(オア)は、並べた条件のうち、どれか一つでも当てはまれば「当たり(True)」とする場合に便利です。例えば、「土曜日」か「日曜日」だったらお休み、という条件を作るときに使います。
Sub HolidayCheck()
Dim dayOfWeek As String
dayOfWeek = "日曜日"
' 日曜日、または、土曜日のとき
If dayOfWeek = "日曜日" Or dayOfWeek = "土曜日" Then
MsgBox "今日はお休みです。ゆっくりしましょう。"
Else
MsgBox "お仕事頑張りましょう!"
End If
End Sub
Orを使えば、たくさんの条件があっても「どれか一つでも引っかかればOK」という優しい判定を作ることができます。ただし、つなげすぎるとコードが長くなるので注意しましょう。
7. Notを使って条件を逆転させる
Not(ノット)は少し特殊で、その後の条件を「逆」にします。「もし〜ではないなら」という言い回しを作りたい時に使います。初心者のうちは <>(等しくない)を使えば事足りることも多いですが、複雑な条件を丸ごとひっくり返す時に便利です。
Sub NotSample()
Dim isHidden As Boolean
isHidden = False
' 非表示(True)ではないなら
If Not isHidden Then
MsgBox "画面は表示されています。"
End If
End Sub
上記のコードの If Not isHidden は、「isHiddenという箱の中身が『真(True)』ではない場合」つまり「偽(False)の場合」に実行されます。少し頭がこんがらがるかもしれませんが、「否定」の意味を持つと覚えておきましょう。
8. 複数の演算子を組み合わせるときの優先順位
算数で「足し算より掛け算を先に計算する」というルールがあるように、VBAの演算子にも「優先順位(ゆうせんじゅんい)」があります。基本的には以下の順番で計算されます。
- 比較演算子(=, >, < など)
- Not
- And
- Or
もし、自分の意図した順番で計算してほしいときは、( )括弧(かっこ)を使いましょう。括弧で囲った部分が最優先で計算されます。
Sub ComplexLogic()
Dim score As Integer
Dim hasTicket As Boolean
score = 90
hasTicket = False
' (点数が80以上、かつ、チケットを持っている) または 特別招待のとき
' 括弧を使って条件のまとまりを明確にするのがコツです
If (score >= 80 And hasTicket = True) Or score = 100 Then
MsgBox "入場できます。"
End If
End Sub
9. 条件分岐を制する者はVBAを制する
今回学んだ「比較演算子」と「論理演算子」は、Excel VBA(エクセル・ブイビーエー)で自動化プログラムを作るための「知恵」そのものです。単なるコピー&ペーストの自動化から、状況を自分で判断して動く「賢いマクロ」を作るためには、これらの演算子の使いこなしが欠かせません。
最初は =(イコール)や >(大なり)といった簡単なものから使い始め、慣れてきたら And や Or で条件を肉付けしていきましょう。プログラミングは積み重ねです。パソコンのキーボードで一歩ずつコードを打ち込んでいけば、必ず自由に扱えるようになりますよ!