ExcelマクロのIf文入門:条件分岐の基本を解説!

この記事はアフィリエイト広告を利用しています。
ExcelマクロのIf文入門:条件分岐の基本を解説!

ようこそ♪ささぽんのExcel教室へ。

マクロを書いていて、「ある条件のときだけこの処理をしたい」と思ったことはありませんか?

そんなときに役立つのが、「If」という条件分岐の仕組みです。

この記事では、初心者の方にも分かりやすく、If文の使い方を解説していきます!

ささぽん

この記事は以下のような方におすすめです!
・特定の条件のときだけ、マクロの動きを変えたいと思ったことがある方
・マクロにおけるIfの使い方を1から勉強したい方

・自分でマクロのコードを書けるようになりたい方

このブログは「基礎からExcelマクロを学びたいと考えている方」や、
「独学での習得に壁を感じた方」に向けて、やさしく、わかりやすく、丁寧に解説しています。

読み終わるころにはきっと、
Excelマクロって意外と簡単かも!」「もっとやってみたい!」と思えるはず。

一緒に楽しく学びながら、Excelマクロ使いを目指しましょう!

よくわかる Microsoft® Excel® マクロ/VBA Office 2021/2019/2016/Microsoft 365対応 [ 富士通ラーニングメディア ]

価格:2860円
(2025/4/27 00:06時点)
感想(1件)

Excel自動化[最強]時短仕事術 マクロ/VBAの基本&業務効率化の即効サンプル【電子書籍】[ 守屋 恵一【著】 ]

価格:1518円
(2025/4/27 00:07時点)
感想(0件)

目次

1.If文とは?

■If文の基本の形を見てみよう

■マクロ記録ではIf文が出てこない?

2.条件式の書き方をマスターしよう!

■条件式に使える記号

■実際のコードで見てみよう

3.ElseとElseIfで複数の分岐を作ろう

■Elseで「それ以外のとき」の処理を追加する

■ElseIfで条件をさらに細かく分ける

■︎ElseとElseIfを組み合わせて使おう

4.If文を書くときのポイント

■︎End Ifの書き忘れに注意

■私がIf文を書くときに工夫していること

5.まとめ

■If文の基本をおさらい!

■︎If文を書くときのポイント

1.If文とは?

Excelマクロを使っていると、「ある条件のときだけ、この処理をしたい!」という場面がよくあります。
例えば:

  • 「セルA1が空欄なら、警告を表示したい」
  • 「B列に◯がついている行だけを別シートに転記したい」

このような「もし〜なら〜する」という処理をマクロで実現するために使うのが「If」です。

■If文の基本の形を見てみよう

まずは、If文の基本的な書き方です:

If 条件 Then
    条件がTrue(真)のときに実行する処理
End If

If文は、「If」から始まり「End If」で終わる1セットの構文です。

1行目では「もし〜なら」という条件を書き、2行目以降には条件に合ったときに実行する処理を記述します。

最後は必ず End If で締めることを忘れないようにしてください!

具体的なコード例:

If Range("A1").Value = "" Then
    MsgBox "セルA1が空です"
End If

このコードは、セルA1が空だったら「セルA1が空です」というメッセージを表示する、という内容です。
実際に、セルA1が空欄の状態と何か入力されている状態でこのマクロを実行してみましょう。

セルA1が空です

A1が空のときだけ、メッセージが表示されることが確認できますね!

これがIf文による条件分岐の仕組みです。

■マクロ記録ではIf文が出てこない?

「もしセルA1が空欄なら、何かをしたい」
そんな条件付きの処理を、マクロの記録機能で再現しようとするとどうなるでしょうか?

例えば、「A1が空欄だったら背景を黄色にする」という設定。
これはまさに「もし〜なら〜する」という形で、If文と似た考え方ですよね!

※マクロの記録について復習したい方は、こちらの記事もどうぞ♪

では実際に、次のような手順でマクロの記録を試してみましょう:

  1. セルA1を空欄にしておく
  2. [開発]タブ → [マクロの記録] をクリック
  3. A1を選択し、[条件付き書式]で「セルが空白なら黄色にする」を設定
  4. 記録を停止し、VBEでコードを確認する

私が記録されたコードは以下でした:

    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False

見ていただくと、If文は登場していませんね!

これは、マクロ記録が「操作の手順(見た目の変化)」を記録しているだけだからです。

「状況を判断して処理を変える」といったロジックまでは記録されないんですね。

If文のような条件による分岐処理は、自分で書いてはじめて実現できるものです。

そのため、If文が書けるようになれば、マクロの記録で出来る以上の処理を自由自在に操れるようになります!

2. 条件式の書き方をマスターしよう!

If文のしくみがわかってきたら、次に知りたいのは「条件の書き方」ですよね。

この章では、条件式を使いこなせるようになるために、よく使う記号(比較演算子)とそのルールをわかりやすく解説していきます!

■条件式に使える記号

If文で使える記号は「=」だけではありません。以下のような比較演算子を使うことで、さまざまな条件を表現できます:

記号意味
=等しいRange(“A1”).Value = “OK”
<>等しくないRange(“A1”).Value <> “NG”
>より大きいRange(“B1”).Value > 100
<より小さいRange(“B1”).Value < 50
>=以上Range(“C1”).Value >= 80
<=以下Range(“C1”).Value <= 30

これらはすべて、「条件がTrue(正しい)かどうか」を判断するために使われる比較演算子と呼ばれるものです。

また、これらの記号は数値(IntegerやDouble)だけでなく、文字列(String)や日付(Date)同士の比較にも使うことができます。

それでは実際のコードで使い方を見ていきましょう!

■実際のコードで見てみよう

ここでは、数字・文字列・日付を使ったIf文の例をそれぞれ見てみましょう。

実際の例を見ることで、条件式の使い方がイメージしやすくなると思います!

【数値の比較】売上が100万円以上かチェックする

If Range("B2").Value >= 1000000 Then
    MsgBox "目標達成!"
End If

→ セルB2の値が100万円以上なら、「目標達成!」と表示されます。

B2の値を100万ぴったりにしたり、100万未満にしたりと何度かマクロを実行し、条件分岐が適切にされていることを確認しましょう。

【文字列の比較】状態が「完了」かどうかを判定する

If Range("C2").Value = "完了" Then
    MsgBox "処理済みです"
End If

→ C2に「完了」と入力されていれば、「処理済みです」と表示されます。

C列を「未済」「完了」というようなプルダウンにしているタスク表等で使えるマクロですね。

文字列比較のポイント:

  • 文字列は ダブルクォーテーション(” “) で囲む必要があります。
  • 全角スペースや、似た文字の入力ミス(「完了 」など)に注意しましょう。
  • 英語の比較では大文字・小文字の違い(例:「OK」と「ok」)は無視されます。

【日付の比較】指定日よりも未来かを判定する

If Range("D2").Value >DateValue("2025/01/01") Then
    MsgBox "期限を過ぎています"
End If

→ D2の日付が2025年1月1日より後であれば、「期限を過ぎています」と表示されます。

日付比較のポイント:

  • 日付は内部的にはシリアル値(数値)として扱われているため、数値と同じように比較が可能です。
  • コード内で日付を直接指定するときは、DateValue(“yyyy/mm/dd”) のように書くと正確に処理されます。

このように、If文ではさまざまな種類の値に対して条件式が使えます。
条件式は、If文の中で「どのときに処理を実行するか」を決める、とても大切な部分です。

次の章では、「そうでない場合」の処理(Else)や、「条件を増やして分岐を広げる(ElseIf)」を学んでいきましょう!

3. ElseとElseIfで複数の分岐を作ろう

If文を使うと、「ある条件に合ったときだけ処理を実行する」という分岐ができます。

でも実際の業務では、「条件に合わないときは別の処理をしたい」「条件がいくつもあるから、それぞれに応じて動きを変えたい」といったことも多いですよね。
そんなときに使えるのが、Else ElseIf です!

この章では、「条件に一致しなかった場合の処理」や「複数条件への分岐」の書き方を、実例を交えて解説していきます。

■Elseで「それ以外のとき」の処理を追加する

If文では、「ある条件を満たすときだけ処理を実行する」ことができますが、実際には「条件に合わないときは、別の処理をしたい」というケースも多いですよね。
そんなときに使えるのが「Else」 です!

まずは、Elseの基本的な使い方です:

If 条件 Then
    条件がTrueのときに実行する処理
Else
    条件がFalseのときに実行する処理
End If

Elseは、If文にくっつける形で使います。

1つのIf文の中に、「Trueのときの処理」と「Falseのときの処理」の両方をセットで書けるのがポイントです!

具体的なコード例:

If Range("A1").Value = "" Then
    MsgBox "セルA1が空です"
Else
    MsgBox "A1セルに「" & Range("A1").Value & "」と入力されています"

このコードでは、セルA1が空欄なら「セルA1が空です」とメッセージを表示します。
逆に、何か入力されていれば「A1セルに『○○』と入力されています」と、入力された内容をそのまま表示してくれます。

If文単体では、「この条件に当てはまったとき」だけの処理しか書けませんでした。
でもElseを使えば、「当てはまらなかったとき」の処理も合わせて書けるようになります。

つまり、TrueでもFalseでも、どちらの場合でもきちんと動きを指定できるというわけです。

さらにもう1つ、Elseを使う大きなメリットがあります。
それは、マクロが条件を判断した証拠を残せることです。

If文だけでマクロを実行した後にファイルに何の変化もなかった場合、「条件が一致しなかっただけなのか、それともマクロ自体が動かなかったのか?」を判別しづらくなることがあります。

一方、Elseの処理を加えておけば、どちらかの処理が必ず実行されるので、「マクロがちゃんと分岐して動いているか?」を目に見える形で確認できます!

このようにElseは、「条件に合わなかったときの処理を書ける」だけでなく、マクロの動作確認デバッグの手助けにもなる重要な構文です。

■ElseIfで条件をさらに細かく分ける

ここまで紹介したIfとElseだけでは、「2つの選択肢」までしか処理を分けられません。
しかし、現実の業務では「条件が3つ以上ある」ケースもよくありますよね。

複数の条件に応じて処理を分岐したいときに使えるのが、ElseIf です!

まずは、ElseIfの基本的な使い方です:

Dim score As Integer
score = Range("A1").Value

If score >= 90 Then
    MsgBox "A評価です"
ElseIf score >= 70 Then
    MsgBox "B評価です"
Else
    MsgBox "C評価です"
End If

このコードでは、点数に応じて3段階の評価を出し分けています。
重要なのは、条件が上から順に評価されていくという点です。

例えば、得点(score)が「95」だった場合、

  1. score >= 90 → True → A評価が表示される
  2. ElseIf score >= 70 は評価されずスキップされる

という処理になります。

もしこの順番を逆にした場合:

If score >= 70 Then
    MsgBox "B評価です"
ElseIf score >= 90 Then
    MsgBox "A評価です"
Else
    MsgBox "C評価です"
End If

scoreが95でも、score >= 70 が先にTrueになるため、B評価が表示されてしまいます。

このように、ElseIfは「最初にTrueになった条件だけが実行される」というルールがあります。

そのため、条件は「厳しい順」「具体的な順」に書くように注意しましょう。

■︎ElseとElseIfを組み合わせて使おう

ここまでで、If文に「Else」を加えることで2つの選択肢、「ElseIf」を使うことで複数の条件を分けて処理できるようになりました。

最後に、復習を兼ねてIf〜ElseIf〜Elseをすべて組み合わせたコードをご紹介します!

例:社員のステータス分類

Dim status As String
status = Range("B2").Value

If status = "在籍" Then
    MsgBox "通常勤務中です"
ElseIf status = "休職中" Then
    MsgBox "現在はお休み中です"
ElseIf status = "退職" Then
    MsgBox "すでに退職されています"
Else
    MsgBox "不明なステータスです"
End If

このようにElseIfで複数の条件を分けつつ、最後にElseを加えることで、どの条件にも当てはまらなかった場合でも処理がされるように組むことができます。

この構成にすると、以下のようなメリットがあります:

  • 条件ごとに分かりやすく処理を分岐できる
  • 最後のElseで「どれにも当てはまらない」ケースもきちんとカバーできる
  • どんな入力にも必ず「何かしらの処理が実行される」構造になるので、プログラムにミスがあった際に気づきやすい

実務でも「パターン分け」や「判定処理」など、分岐が必要な場面は多いので、この形が使えるようになるとマクロの活用の幅が一気に広がります!

4. If文を書くときのポイント

If文はシンプルな構文に見えて、ちょっとした書き間違いや見落としで上手く動かなくなることがあります。

この章では、If文を書くときに気をつけたいポイントや、私が実践している工夫をご紹介します!

■︎End Ifの書き忘れに注意

If文を書くときに初心者がつまずきやすいポイントのひとつが、End If の書き忘れです。

VBAでは、If文が複数行にわたる場合、「始まり」と「終わり」をセットで書くことがルールになっています。

例えば、以下のコードを実行してみましょう:

If Range("A1").Value = "" Then
    MsgBox "セルA1が空です"

このように End If を書かずに実行しようとすると、VBAエディタでエラーが表示されてしまいます。

Ifブロックに対応するEnd Ifがありません

ちなみに、1行で完結しているIf文は End If が不要です:

If Range("A1").Value = "" Then MsgBox "セルA1が空です"

ただし、実務で書くマクロでは複数行にまたがるIf文になることが多いため、「If〜Then〜End If」で1つのまとまりとして書くスタイルを基本にしておくのがおすすめです!

■私がIf文を書くときに工夫していること

If文に関するトラブルを防ぐために、私が実践している工夫を2つご紹介します。

①Ifを書いたら先に End If を書く

私がいつも意識しているのは、まずIf文の枠を先に書いておくことです:

If Range("A1").Value = "" Then

End If

このように If〜Then と End If を先に用意しておくと、書き忘れによるエラーを防げるだけでなく、処理の範囲があらかじめ明確になることで、後から中の処理を書いていく際も構造を意識しやすくなります。

実務では、If文の中にさらにIf文が入るネスト構造を書くことも多いので、始点と終点を最初に決めておくことで、見間違いや書き忘れのミスも防げるようになります。

 ②中の処理はインデントで見やすく

もうひとつの工夫は、Ifの中の処理をインデント(字下げ)することです:

If Range("A1").Value = "" Then
    MsgBox "セルA1が空です"
End If

このように処理を1段下げて書くことで、
「この処理はIf文の条件がTrueのときだけ実行される」
という構造が視覚的にも分かりやすくなります。

特に、以下のようにネストが入るケースではインデントの有無で可読性が大きく変わります:

If Range("A1").Value <> "" Then
    If Range("A1").Value = "完了" Then
        MsgBox "処理が完了しています"
    End If
End If

このように、複数の条件を組み合わせるようなコードでも、インデントがあることで「どの処理がどのIfに属しているか」が一目で分かります。

IfとEnd Ifの位置が揃っていることで、書き忘れの防止にもつながるので一石二鳥です!

インデントはマクロの動作には影響しませんが、読みやすさ・保守性・他人への共有の観点では非常に大切です。
ぜひ、「構造を目で見てわかるように整える」という意識を持って書いてみてください。

5.まとめ

今回は、Excelマクロの中でも「条件によって処理を変える」ための基本構文、If文について解説しました。

「もし〜なら〜する」という考え方をマクロで実現する第一歩ですね!

■If文の基本をおさらい!

If文を使えば、ある条件を満たしたときだけ、指定の処理を実行することができます。

If文で使う構成を改めて整理しましょう:

パターン使いどころ特徴
If~条件に合うときだけ処理する最も基本的な形
If~Else条件に合わないときも処理を分けたいどちらか一方の処理が必ず実行される
If~ElseIF~Else条件が複数あるときに順番に評価上から順に条件をチェックする

→ 複数条件に分岐できるようになると、マクロが一気に実用的になります!

■︎If文を書くときのポイント

マクロの動作を安定させるために、以下の注意点とコツを意識してみましょう。

ミスを防ぐために気をつけたいこと:

  • End If の書き忘れ(複数行Ifでは必須)
  • 条件式の書き方(厳しい条件から書く)
  • 比較対象の形式を揃える(数値/文字列)

読みやすく・編集しやすくするための工夫:

  • If を書いたら、先に End If をセットで書いてしまう
  • 中の処理は1段インデントして、構造を見やすく保つ

→ 構造を意識することで、見直しや修正をしやすくなります。

If文は、どんなマクロにもほぼ必ず登場するといってもいいくらい、超基本かつ超重要な構文です。

今回の内容を押さえておけば、次は「複数の条件を同時に満たす」「繰り返し処理に条件を加える」など、さらにレベルアップしたマクロにも挑戦できます!

引き続き色々な構文を勉強して、マクロでできることを増やしていきましょう♪

\ Excelマクロ制作も承っています /

各種クラウドソーシングサイトにて業務効率化ツールの作成・カスタマイズを承っております。
ご相談・お見積もりは無料ですので、まずはお気軽にご覧ください!

見積もり無料!超効率化!Excelマクロ開発します ルーティンワークの煩わしさに悩んでいる方へ