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 文から、どんどん自分のマクロに取り入れてみてくださいね。
まとめ
VBAのIf文を使いこなして条件分岐をマスターしよう
VBAのIf文は、プログラムの流れを自在にコントロールするための最も基本でありながら非常に重要な機能です。条件分岐を理解することで、単純な処理しかできなかったマクロが、状況に応じて判断しながら動作する実用的なツールへと進化します。今回解説したIf文、ElseIf、Select Caseの考え方をしっかり身につけることで、Excel VBAの開発効率は大きく向上します。
特にIf文は「もし〜なら」という日常的な思考をそのままコードに落とし込めるため、プログラミング初心者でも理解しやすい特徴があります。条件分岐の基本として、TrueとFalseの概念をしっかり理解することが重要です。また、比較演算子を正しく使うことで、数値や文字列の判定を正確に行えるようになります。
複数の条件を扱う場合にはElseIfを使うことで、より細かい分岐が可能になります。一方で、条件が増えすぎるとコードが読みにくくなるため、そのような場合にはSelect Case文を活用すると、より整理された見やすいコードを書くことができます。用途に応じてIf文とSelect Case文を使い分けることが、読みやすく保守性の高いプログラムを作るコツです。
また、ネスト(入れ子)構造を使うことで、より複雑な条件分岐も実現できますが、深くなりすぎると可読性が低下します。そのため、インデントを意識して構造を明確にし、できるだけシンプルにまとめることが大切です。プログラムは自分だけでなく他人も読む可能性があるため、誰が見ても理解しやすいコードを書く意識を持ちましょう。
実務では、在庫管理や顧客データの分類、売上分析、入力チェックなど、さまざまな場面で条件分岐が活用されています。例えば「特定の条件を満たした場合のみ処理を実行する」「条件によって処理内容を変える」といった処理は、すべてIf文をベースに構築されています。VBAで業務効率化を目指すなら、条件分岐は避けて通れない重要なスキルです。
今回の内容を踏まえて、まずは簡単な条件分岐から実際にコードを書いて試してみてください。実際に手を動かすことで理解が深まり、応用力も身についていきます。最初はシンプルなIf文から始めて、徐々にElseIfやSelect Caseを組み合わせていくことで、より高度なマクロを作成できるようになるでしょう。
サンプルプログラム(総復習)
Sub FinalCheck()
Dim score As Integer
score = 75
If score >= 80 Then
MsgBox "とても良い成績です!"
ElseIf score >= 50 Then
MsgBox "合格です!"
Else
MsgBox "もう少し頑張りましょう。"
End If
End Sub
合格です!
生徒
「If文って、最初は難しそうだと思っていましたが、『もし〜なら』という考え方で理解すると意外とシンプルですね。」
先生
「その通りです。プログラミングは難しく見えても、基本は日常の判断をそのままコードにしているだけなんですよ。」
生徒
「ElseIfを使うと条件を増やせるのも便利ですね。でも増えすぎると見づらくなるのも実感しました。」
先生
「いいところに気づきましたね。そういう時にSelect Caseを使うと、すっきり整理できます。コードは動くだけでなく、読みやすさも大切です。」
生徒
「ネストも使えるけど、深くしすぎない方がいいんですよね?」
先生
「そうです。複雑になりすぎると自分でも分からなくなりますから、できるだけシンプルに書く意識を持ちましょう。」
生徒
「条件分岐ができると、できることが一気に増えそうですね!」
先生
「まさにその通りです。If文はVBAの基礎であり、応用の土台です。しっかり身につけて、実務で活かしていきましょう。」