VBAのIf文の使い方を完全ガイド!初心者でもわかる条件分岐
生徒
「VBAで条件によって処理を分岐する方法ってありますか?」
先生
「もちろんありますよ。VBAでは If 文を使うことで、条件に応じて処理を切り替えることができます。」
生徒
「どんなふうに使うんですか?」
先生
「それでは、基本的な書き方を一緒に見ていきましょう!」
1. If文とは?
VBAの If 文は、プログラムの中で条件に応じて処理を分岐させるために使います。例えば、ある条件が「True(真)」だった場合に特定の処理を実行し、条件が満たされなければ別の処理を行う、ということが簡単にできます。条件分岐を理解すると、プログラムの流れを柔軟にコントロールできるようになり、Excelの自動化がぐっと便利になります。
日常生活で例えると、「もし雨が降っていたら傘を持っていく、そうでなければ手ぶらでいく」という判断をプログラムに行わせるのがこの If 文の役割です。プログラミング未経験の方でも、この「もしも〜なら」という考え方さえ分かれば、すぐにマスターできますよ!
2. 基本のIf〜Then〜Elseの書き方
最も基本的な条件分岐は、「もし〜ならAをする、そうでなければBをする」という形です。VBAでは以下のようなルールで記述します。英語の文章に近い形なので、意味を考えながら書くと覚えやすいですよ。
- If(イフ):「もしも」という意味です。この後に条件を書きます。
- Then(ゼン):「その時は」という意味です。条件が正しいときに実行する命令を書きます。
- Else(エルス):「それ以外」という意味です。条件が違ったときに実行する命令を書きます。
- End If(エンド・イフ):「条件分岐はここで終わり」という印です。
Sub CheckPoint()
Dim score As Integer
score = 45
' もしスコアが50以上なら「合格」、そうでなければ「不合格」を表示
If score >= 50 Then
MsgBox "合格です!"
Else
MsgBox "不合格です。"
End If
End Sub
上記のコードを実行すると、変数 score の中身が 45 なので、条件「50以上」を満たしません。そのため、Else の方の命令が動き、メッセージが表示されます。
不合格です。
3. たくさんの条件を分けるElseIfの使い方
「合格か不合格か」の2択ではなく、「80点以上なら大変良い、50点以上なら良い、それ以外は頑張りましょう」といったように、3つ以上の分かれ道を作りたいこともありますよね。そんな時に使うのが ElseIf(エルスイフ) です。
ElseIf を使うと、上から順番に条件をチェックしていき、最初に当てはまった場所の処理だけを実行します。どれにも当てはまらなかった場合、最後に Else があればその処理が行われます。
Sub MultiCondition()
Dim temperature As Integer
temperature = 28
If temperature >= 30 Then
MsgBox "今日は猛暑日です。"
ElseIf temperature >= 25 Then
MsgBox "今日は夏日です。"
Else
MsgBox "過ごしやすい気温です。"
End If
End Sub
このプログラムでは、まず「30以上か?」を調べます。28なのでハズレです。次に「25以上か?」を調べます。これは当たりなので、「今日は夏日です」と表示して終わります。このように、複数の分かれ道をスッキリ書くことができます。
4. スッキリ書けるSelect Case文とは?
条件分岐が非常に多くなると、ElseIf を何度も書くのが大変になり、コードが見づらくなってしまいます。そんな時に便利なのが Select Case(セレクト・ケース) 文です。
Select Case は、一つの変数の値に注目して、「それがAの時」「Bの時」とケースを分けて書く方法です。特に、決まった値(例えば曜日や月、ランクなど)で分岐させる時にとても読みやすいプログラムになります。
Sub RankCheck()
Dim rank As String
rank = "B"
' 変数rankの値で分岐させる
Select Case rank
Case "A"
MsgBox "素晴らしい成績です!"
Case "B"
MsgBox "平均的な成績です。"
Case "C"
MsgBox "もっと練習が必要です。"
Case Else
MsgBox "判定不能です。"
End Select
End Sub
Case Else は If 文で言う Else と同じで、「どのケースにも当てはまらない時」の処理になります。End Select で閉じるのを忘れないようにしましょう。
5. If文とSelect Case文の賢い使い分け
どちらも「条件分岐」をするための命令ですが、どちらを使うべきか迷うことがありますよね。プロの現場では、以下のように使い分けるのが一般的です。
If文が向いているとき
- 「○歳以上かつ○歳未満」のような範囲を指定する条件
- 「AかつB」「AまたはB」のように複雑な組み合わせがある時
- 条件が2つか3つ程度の単純な時
Select Case文が向いているとき
- 一つの変数が「1、2、3…」と変化するのを見たい時
- 分かれ道が5つも6つもあるような時
- 「ランクA、B、C」のように特定の値と一致するか調べたい時
基本的にはどちらで書いても正しく動きますが、「後で自分や他人が読んだときに分かりやすいか」という基準で選ぶのが、VBA上達の秘訣です。
6. 比較演算子をマスターしよう
条件を書くときには、記号を使って大きさを比べます。これを「比較演算子(ひかくえんざんし)」と呼びます。普段算数で使う記号と少し違うものもあるので、整理しておきましょう。
| 記号 | 意味 | 例(もしAが5なら) |
|---|---|---|
= |
等しい | A = 5 (正しい) |
<> |
等しくない | A <> 10 (正しい) |
> |
より大きい | A > 5 (間違い、5は含まない) |
>= |
以上(等しいか大きい) | A >= 5 (正しい、5も含む) |
特に「等しくない」を表す <> は、VBA特有の書き方なので覚えておきましょう。「小なり」と「大なり」を背中合わせにした形で、「どちらでもない=一致しない」という意味になります。
7. 条件の中に条件を入れる「ネスト」の注意点
プログラミングをしていると、「もし男性なら、さらに、もし20歳以上なら」というように、 If 文の中にさらに If 文を入れたくなることがあります。これをネスト(入れ子)と呼びます。
ネストはとても強力ですが、やりすぎると迷路のように複雑になってしまいます。初心者のうちは、2段階くらいまでに留めておくのがコツです。コードを書くときは必ず「インデント(段落)」をつけて、どこからどこまでが一つの塊か分かりやすくしましょう。
Sub NestedIf()
Dim isMember As Boolean
Dim hasCoupon As Boolean
isMember = True
hasCoupon = True
If isMember = True Then
' 会員だった場合のさらに詳しい条件
If hasCoupon = True Then
MsgBox "会員特典とクーポンで20%オフです!"
Else
MsgBox "会員特典で10%オフです。"
End If
Else
MsgBox "通常料金になります。"
End If
End Sub
このように字下げ(インデント)を行うことで、プログラムの構造がひと目でわかるようになります。VBE(マクロを書く画面)で「Tabキー」を押すと簡単に字下げができますよ。
8. エラーを防ぐ!条件分岐を書く時のコツ
マクロが動かない原因の多くは、単純な書き間違いです。条件分岐をミスなく書くためのアドバイスを3つお伝えします。
1. End Ifを先に書く: If と書いたら、中身を書く前にまず End If を書いてしまいましょう。後で書こうとすると、ついつい忘れがちになります。
2. 文字の比較は正確に: If name = "田中" のように文字を比べる時は、一文字でも違う(例えばスペースが入っているなど)と別物と判断されてしまいます。エクセルシート上のデータに余計な空白がないか確認しましょう。
3. 数値の型を合わせる: 数字を比べる時は、変数の型を Integer や Long に正しく設定しておきましょう。型がバラバラだと、意図しない判定結果になることがあります。
9. 条件分岐ができるとマクロが劇的に進化する
ここまでの内容で、 If 文、 ElseIf 、 Select Case の基本はバッチリです!条件分岐ができるようになると、ただ順番に動くだけのマクロから、状況を自分で判断して賢く動くマクロへと進化します。
例えば、「在庫が少なくなったら自動でメールを送る」「土日祝日だけ背景色を変える」「特定の部署のデータだけ別シートにコピーする」といった複雑な自動化も、すべてこの条件分岐が土台になっています。まずは簡単な If 文から、どんどん自分のマクロに取り入れてみてくださいね。