【2026年7月最新】VBAのIf文完全ガイド|ElseIf・論理演算子・ネスト・Claude Codeで自動生成まで
この記事の内容
VBAでExcelを自動化する際、必ず必要になるのが「条件分岐」です。「セルの値が100以上ならA、未満ならB」「担当者が山田さんなら東日本担当に振り分ける」——こうした処理をVBAで実現するのがIf文です。
VBAのIf文は見た目はシンプルですが、ElseIf・論理演算子・ネスト・比較演算子など、覚えるべきことが多くあります。また、条件が多くなるとIf文よりSelect Caseの方が適切な場面もあります。
この記事ではVBAのIf文に関する全知識を体系的に解説します。さらに2026年現在の実務的な視点として、Claude Codeを使ってVBAの条件分岐コードを自動生成する方法も詳しく紹介します。
この記事で分かること:
01 VBA IF BASICS VBAのIf文とは?条件分岐の基本を理解する 条件が真(True)か偽(False)かによって処理を分岐させる最重要構文
VBAのIf文は、指定した条件が真(True)の場合と偽(False)の場合で、実行する処理を切り替える構文です。Excel VBAのマクロを作る上で最も頻繁に使う構文の一つであり、条件分岐なしで実用的なマクロを作ることはほぼ不可能です。
📚 用語解説
If文(条件分岐):VBAの制御構造の一つ。「もし〇〇ならAを実行し、そうでなければBを実行する」という処理の分岐を実現する。プログラミング全般の基礎であり、VBAに限らずPython・JavaScript・C#など全ての言語に同様の構文がある。VBAでは「If 条件 Then 処理 End If」の形で書く。
If文が使われる代表的な業務シーンを確認しておきましょう。
| 業務シーン | 条件の例 | If文の処理内容 |
|---|---|---|
| 売上データの評価 | 売上 >= 1000000 | 「達成」と表示する |
| 社員名簿の振り分け | 部署 = "営業部" | 別シートにコピーする |
| 在庫管理 | 在庫数 < 10 | 警告セルを赤く塗りつぶす |
| 請求書処理 | 支払期限 < Date() | 「期限超過」フラグを立てる |
| 成績管理 | 得点 >= 80 | 「合格」、60〜79は「条件付き」、未満は「不合格」 |
02 IF THEN ELSE If-Then-Else文の書き方と4つの基本パターン 単行If・ブロックIf・Else付き・複数Elseの4パターンを完全解説
VBAのIf文には4つの基本パターンがあります。状況に応じて適切なパターンを使い分けることが、読みやすく保守しやすいコードを書くポイントです。
2-1. パターン①:単行If文(1行で完結)
最もシンプルなIf文の書き方です。条件と処理を1行に書けます。処理が1つだけで単純な場合に適しています。
' 売上が100万以上なら「達成」と表示 If Cells(2, 1).Value >= 1000000 Then MsgBox "達成"
単行で書くIf文(1行で「If 条件 Then 処理」まで書く形)の場合は、End Ifは書きません。逆に、ブロック形式(Thenの後で改行する形)の場合は必ずEnd Ifが必要です。End Ifを忘れるとコンパイルエラーになります。
2-2. パターン②:ブロックIf文(複数行の処理)
処理が複数行にわたる場合は、ブロック形式で書きます。「If 条件 Then」の後に改行し、処理を書き、「End If」で閉じます。
If Cells(2, 1).Value >= 1000000 Then
' 条件が真の場合の処理(複数書ける)
Cells(2, 2).Value = "達成"
Cells(2, 2).Interior.Color = RGB(0, 255, 0)
End If
2-3. パターン③:If-Else文(2分岐)
条件が真の時と偽の時で、それぞれ別の処理を実行する場合に使います。Elseのブロックには「条件が偽(False)の場合の処理」を書きます。
If Cells(2, 1).Value >= 1000000 Then
Cells(2, 2).Value = "達成"
Cells(2, 2).Interior.Color = RGB(0, 255, 0)
Else
Cells(2, 2).Value = "未達"
Cells(2, 2).Interior.Color = RGB(255, 0, 0)
End If
2-4. パターン④:If文の省略形(IIf関数)
VBAには「IIf関数」という1行で条件分岐の値を返す関数もあります。「IIf(条件, 真の値, 偽の値)」という形で書きます。Pythonの三項演算子や、Excelのif関数に相当します。ただし、IIf関数は両方の値を評価するため、エラーが起きやすい場合はブロックIf文を使う方が安全です。
' IIf関数で条件分岐 Dim result As String result = IIf(Cells(2, 1).Value >= 1000000, "達成", "未達") Cells(2, 2).Value = result
| パターン | 書き方 | End Ifが必要か | 向いているケース |
|---|---|---|---|
| 単行If | If 条件 Then 処理 | ❌ 不要 | 処理が1つ・シンプルな場合 |
| ブロックIf | If 条件 Then改行 処理 End If | ✅ 必須 | 処理が複数行ある場合 |
| If-Else | If 条件 Then 処理A Else 処理B End If | ✅ 必須 | 真・偽で別々の処理がある場合 |
| IIf関数 | IIf(条件, 真の値, 偽の値) | ❌ 不要(関数) | 値を返す1行処理に限定 |
03 ELSEIF MULTI ElseIf文で多段分岐を作る方法 3つ以上の条件を順番にチェックするElseIfの使い方を実例で解説
条件が3つ以上ある場合、ElseIfを使って複数の条件を順番にチェックする多段分岐が作れます。「もし〇〇ならA、そうでなく△△ならB、それ以外ならC」という処理です。
📚 用語解説
ElseIf(多段分岐):VBAのIf文の中で複数の条件を追加するキーワード。「If 条件1 Then 処理1 ElseIf 条件2 Then 処理2 Else 処理3 End If」の形で使う。条件は上から順に評価され、最初にTrueになった条件の処理だけが実行される。それ以降の条件は評価されない(ショートサーキット)。
以下は成績評価の具体例です。90点以上→S評価、80点以上→A評価、70点以上→B評価、それ未満→C評価という処理をElseIfで実現します。
Dim score As Integer
Dim grade As String
score = Cells(2, 1).Value
If score >= 90 Then
grade = "S"
ElseIf score >= 80 Then
grade = "A"
ElseIf score >= 70 Then
grade = "B"
Else
grade = "C"
End If
Cells(2, 2).Value = grade
ElseIfは条件を上から順に評価し、最初にTrueになった箇所で処理を実行して残りをスキップします。そのため、「score >= 90」「score >= 80」のように書く場合、必ず大きい数値の条件を上に書く必要があります。もし「score >= 70」を一番上に書くと、70点以上なら全てBになってしまいます。
04 LOGICAL OPERATORS 論理演算子(And・Or・Not)の使い方 複数の条件を組み合わせる3種類の演算子を実例で完全解説
実務では「売上が100万以上 かつ 達成率が90%以上」のように、複数の条件を組み合わせた分岐が必要になることが多いです。VBAでは論理演算子(And・Or・Not)を使って複数の条件を一つのIf文で表現できます。
📚 用語解説
論理演算子(And・Or・Not):If文の条件式で複数の条件を組み合わせるための演算子。And(AかつB)・Or(AまたはB)・Not(〜でない)の3種類が主要なもの。例:「If score >= 80 And attendance >= 0.9 Then」は「80点以上かつ出席率90%以上」の場合のみTrueになる。
4-1. And演算子(AかつBの場合)
And演算子は「条件Aが真、かつ条件Bも真」の場合にTrueを返します。両方の条件を同時に満たすケースに使います。
' 売上が100万以上 かつ 前年比が100%以上のみ達成と判定
If Cells(2, 1).Value >= 1000000 And Cells(2, 2).Value >= 1 Then
Cells(2, 3).Value = "ダブル達成"
End If
4-2. Or演算子(AまたはBの場合)
Or演算子は「条件Aが真、または条件Bが真」の場合にTrueを返します。どちらか一方でも満たせばよいケースに使います。
' 部署が営業部「または」販売推進部のセルに色をつける
If Cells(2, 1).Value = "営業部" Or Cells(2, 1).Value = "販売推進部" Then
Cells(2, 1).Interior.Color = RGB(255, 255, 0)
End If
4-3. Not演算子(〜でない場合)
Not演算子は条件の真偽を反転します。「〜でない場合に処理をする」という書き方が必要な時に使います。
' 「完了」ではない行だけ処理する
If Not Cells(2, 3).Value = "完了" Then
' 未完了の行に黄色を付ける
Rows(2).Interior.Color = RGB(255, 255, 0)
End If
| 論理演算子 | 読み方 | 真(True)になる条件 | 例 |
|---|---|---|---|
| And | かつ | 条件A・条件Bが両方True | A >= 100 And B >= 50 → 両方満たす時True |
| Or | または | 条件A・条件Bの少なくとも一方がTrue | A = "東京" Or A = "大阪" → どちらかの時True |
| Not | 〜でない | 条件がFalseの時にTrue | Not A = "完了" → 完了以外の時True |
| Xor | 一方だけ | 条件A・条件Bのどちらか一方だけがTrue | A Xor B → 両方同じ値の時False(あまり使わない) |
05 COMPARISON OPS 比較演算子(Like・Is)と文字列・日付の比較 Like演算子のワイルドカード・Is演算子でのオブジェクト比較を解説
VBAのIf文で条件を書く際、数値の大小比較(>=、<=など)だけでなく、文字列のパターンマッチング(Like演算子)やオブジェクトの比較(Is演算子)も使えます。
5-1. 基本の比較演算子一覧
| 演算子 | 意味 | 使用例 | 注意点 |
|---|---|---|---|
| = | 等しい | A = 100 | 文字列の比較でも使用可 |
| <> | 等しくない | A <> "" | 文字列の「Not equal」に使う |
| > | 〜より大きい | A > 100 | 数値・日付に使用 |
| >= | 〜以上 | A >= 100 | 数値・日付に使用 |
| < | 〜より小さい | A < 100 | 数値・日付に使用 |
| <= | 〜以下 | A <= 100 | 数値・日付に使用 |
| Like | パターンマッチ | A Like "*山田*" | 文字列のみ。ワイルドカードが使える |
| Is | オブジェクト同一 | A Is Nothing | オブジェクト変数の比較専用 |
5-2. Like演算子でパターンマッチング
📚 用語解説
Like演算子:VBAの文字列パターンマッチング演算子。「A Like パターン」の形で使い、文字列Aがパターンに一致する場合にTrueを返す。ワイルドカード「*」(0文字以上の任意文字列)、「?」(1文字の任意文字)、「[abc]」(a・b・cのいずれか1文字)が使える。ExcelのCOUNTIF関数のワイルドカードと似たルールで使える。
Like演算子のワイルドカード一覧と使い方の例です。
| ワイルドカード | 意味 | 使用例 | 一致する例 |
|---|---|---|---|
| *(アスタリスク) | 0文字以上の任意文字列 | "*山田*" | 山田、鈴木山田、山田太郎A |
| ?(クエスチョン) | 1文字の任意文字 | "山田?" | 山田太、山田花(2文字のみ) |
| [文字](角括弧) | []内のいずれか1文字 | "[AC]" | AまたはC(1文字) |
| [A-Z](範囲) | 範囲内の1文字 | "[A-C]*" | A・B・Cで始まる文字列 |
' 担当者名に「山田」が含まれる行を処理
If Cells(2, 1).Value Like "*山田*" Then
Cells(2, 2).Value = "東日本担当"
End If
' メールアドレスが.co.jpで終わる場合
If Cells(2, 3).Value Like "*.co.jp" Then
Cells(2, 4).Value = "法人"
End If
5-3. Is演算子でオブジェクトを比較する
Is演算子はオブジェクト変数の比較専用です。最も多く使うのは「Is Nothing」(オブジェクトが空かどうか)と「Is Not Nothing」(オブジェクトが設定されているかどうか)のパターンです。
' 検索結果が見つかったかどうかを確認
Dim foundCell As Range
Set foundCell = Range("A:A").Find("山田")
If foundCell Is Nothing Then
MsgBox "見つかりませんでした"
Else
MsgBox "発見: " & foundCell.Address
End If
5-4. 日付の比較
VBAで日付を比較する場合は、Date()関数(今日の日付)やCDate()関数(文字列を日付に変換)と組み合わせて使います。日付を比較演算子で直接比較できます。
' 期限日が今日より前(期限超過)の行を処理
Dim deadline As Date
deadline = CDate(Cells(2, 1).Value)
If deadline < Date() Then
Cells(2, 2).Value = "期限超過"
Cells(2, 1).Font.Color = RGB(255, 0, 0)
End If
06 NESTED IF If文のネスト(入れ子)と可読性を保つコツ ネストが深くなりすぎないための設計パターンとコードの整理方法
If文の中に別のIf文を書く「ネスト(入れ子)」構造は、複雑な条件分岐を表現する際に使います。しかし、ネストが深くなりすぎるとコードの可読性が大幅に低下し、バグの温床になるため、注意が必要です。
📚 用語解説
ネスト(入れ子):プログラミングでIf文やループ(For文・Do While文)の中に同種の構文を入れる構造。VBAのIfネストは「If 条件1 Then If 条件2 Then 処理 End If End If」の形。インデント(字下げ)が深くなるほど可読性が下がるため、ネストは3段階以内を目安にする。深いネストはElseIfの活用・論理演算子の組み合わせ・サブプロシージャの分割で解消できる。
6-1. ネストの基本例と書き方
' 部署が「営業部」かつ売上が100万以上の場合の処理
If Cells(2, 1).Value = "営業部" Then
If Cells(2, 2).Value >= 1000000 Then
Cells(2, 3).Value = "最優秀"
Else
Cells(2, 3).Value = "優良"
End If
Else
Cells(2, 3).Value = "対象外"
End If
6-2. ネストを浅くするリファクタリング
上記のネスト例は、And演算子を使って1つのIf文に書き直せます。ネストが深い場合はAnd/Or演算子で結合できないか、早期リターン(Exit Sub/Exit Function)で分岐を減らせないかを検討してください。
' And演算子でネストを解消した例
If Cells(2, 1).Value = "営業部" And Cells(2, 2).Value >= 1000000 Then
Cells(2, 3).Value = "最優秀"
ElseIf Cells(2, 1).Value = "営業部" Then
Cells(2, 3).Value = "優良"
Else
Cells(2, 3).Value = "対象外"
End If
ネストが3段階を超えると可読性が急激に低下します。深いネストになった場合は、内部の処理をSub(サブプロシージャ)またはFunction(関数)に分割することを検討してください。複数のプロシージャに分けることで、それぞれのロジックがシンプルになり、テストもしやすくなります。
07 IF VS SELECT If文 vs Select Case:使い分けの判断基準 同一変数の値を複数パターンでチェックする場合はSelect Caseが読みやすい
VBAには条件分岐の構文としてIf文の他に「Select Case文」もあります。同じ変数の値を複数の値と比較する場合は、Select Caseを使う方がコードがすっきりします。
| 構文 | 向いているケース | 向いていないケース | 読みやすさ |
|---|---|---|---|
| If-ElseIf | 異なる変数・複雑な複合条件・範囲比較 | 同一変数を多数のパターンで比較 | 複合条件に強い |
| Select Case | 同一変数を複数の値や範囲で比較 | 異なる変数を組み合わせた条件 | 同一変数の多分岐に強い |
以下は「都道府県コードに応じて地域を返す」処理のIf文とSelect Caseの比較です。
' If-ElseIfでの書き方(やや冗長)
Dim pref As String
pref = Cells(2, 1).Value
If pref = "北海道" Then
Cells(2, 2).Value = "北海道"
ElseIf pref = "青森" Or pref = "岩手" Or pref = "宮城" Then
Cells(2, 2).Value = "東北"
ElseIf pref = "東京" Or pref = "神奈川" Or pref = "埼玉" Or pref = "千葉" Then
Cells(2, 2).Value = "関東"
Else
Cells(2, 2).Value = "その他"
End If
' Select Caseでの書き方(同一変数比較ならこちらが読みやすい)
Dim pref As String
pref = Cells(2, 1).Value
Select Case pref
Case "北海道"
Cells(2, 2).Value = "北海道"
Case "青森", "岩手", "宮城"
Cells(2, 2).Value = "東北"
Case "東京", "神奈川", "埼玉", "千葉"
Cells(2, 2).Value = "関東"
Case Else
Cells(2, 2).Value = "その他"
End Select
Select CaseはCase句で「Is >= 80」のような範囲比較もできます。「Case Is >= 90」「Case 80 To 89」のような書き方が可能で、成績評価のような用途に向いています。
同一変数を比較?
複合条件?
同一変数を3パターン以上比較
→ Select Case有利
複数変数・And/Or必要
→ If-ElseIf有利
どちらも同じ動作
読みやすい方を選ぶ
08 CLAUDE CODE VBA Claude CodeでVBAのIf文を自動生成する 条件の説明を日本語で入力するだけでVBAコードを生成できる実践的な方法
VBAのIf文の書き方を理解しても、「実際にどう書けばいいか迷う」「複雑な条件をコードに落とし込めない」という場面は必ず出てきます。2026年現在、Claude Codeを使えばVBAのIf文を含むマクロコードを自然言語で指示して自動生成できます。
8-1. Claude CodeへのVBAコード生成指示の例
| あなたの指示 | Claude Codeが生成するもの |
|---|---|
| 「B列の売上が100万以上かつC列の達成率が90%以上なら"ダブル達成"、100万以上なら"単独達成"、それ以外は"未達"と入力するVBAマクロ」 | ElseIf + And演算子を使った適切なVBAコード |
| 「A列の担当者名に"山田"または"鈴木"が含まれる行を別シートにコピーするマクロ」 | Like演算子 + Or演算子 + 行コピー処理のVBAコード |
| 「このコードのネストが深くて読みにくいので読みやすく書き直して(コードを貼り付け)」 | And/Or演算子でネストを解消した読みやすいコード |
| 「日付列が今日より30日以内に期限が来る行に黄色を付けるVBAマクロ」 | 日付比較 + Interior.Color のVBAコード |
8-2. 非エンジニアがClaude Codeを使う実際の流れ
「〇〇の場合に△△する
Excelマクロを書いて」
If文・ElseIf・
演算子を自動選択
Alt+F11 → 標準モジュール
→ 貼り付けて実行
「〇〇の場合も追加して」
と伝えて追加修正
VBAの条件分岐も、Claude Codeで自動生成できます
「If文のElseIfが何段もあって読みにくい」「複雑な条件をVBAで実現したい」——こうしたExcel VBAの課題はClaude Codeで解決できます。条件を日本語で説明するだけでコードが生成されるため、VBAを1から覚えなくても業務自動化が実現できます。
まずは無料相談で、Excelでの自動化の課題をヒアリングさせてください。Claude Codeを活用した業務効率化の具体的な方法をご提案します。
NEXT STEP
この記事の内容を、あなたのビジネスで
実践してみませんか?
AI活用を自社で回せるようになりたい方へ
AI鬼管理
Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。
よくある質問
Q. VBAのIf文の基本的な書き方を教えてください。
A. VBAのIf文の基本構文は「If 条件 Then 処理 End If」です。処理が1行なら「If 条件 Then 処理」と1行で書くこともできます(この場合End Ifは不要)。条件がFalseの場合の処理も書く場合は「If 条件 Then 処理A Else 処理B End If」の形です。3つ以上の分岐が必要な場合はElseIfを使い「If 条件1 Then 処理1 ElseIf 条件2 Then 処理2 Else 処理3 End If」と書きます。
Q. VBAでElseIfを使う際の注意点は何ですか?
A. ElseIfは条件を上から順に評価し、最初にTrueになった条件の処理を実行して残りをスキップします。そのため、条件の順番が重要です。例えばスコアの評価で「90点以上→S」「80点以上→A」とする場合、必ず90点の条件を先に書く必要があります。逆に80点の条件を先に書くと、90点の人も「A」と判定されてしまいます。また、ElseIfは「ElseIf」と1つの単語で書きます(Else Ifと分けるとブロックが閉じないバグになります)。
Q. VBAのAnd演算子とOr演算子の違いを教えてください。
A. And演算子は「両方の条件がTrueの場合のみTrueを返す」演算子です。Or演算子は「少なくとも一方がTrueの場合にTrueを返す」演算子です。例えば「A >= 80 And B >= 80」は両方80以上の場合のみTrue、「A >= 80 Or B >= 80」はどちらかが80以上ならTrueになります。複数の演算子を組み合わせる場合は、カッコ()で優先順位を明示することが重要です。
Q. VBAのLike演算子の使い方を教えてください。
A. Like演算子は文字列のパターンマッチングに使います。「変数 Like パターン」の形で書き、パターンに一致する場合にTrueを返します。ワイルドカードとして「*」(0文字以上の任意文字列)、「?」(任意の1文字)、「[文字]」(括弧内のいずれか1文字)が使えます。例えば「Cells(2,1).Value Like "*山田*"」は「山田」を含む文字列全てにマッチします。文字列の前後検索、メールアドレスの形式チェックなどに使えます。
Q. If文のネストが深くなりすぎた場合、どう解消すればいいですか?
A. ネストが深い場合の解消策は3つです。①And/Or演算子で複数の条件を1つのIf文にまとめる、②ElseIfで段階的な分岐に書き直す、③内部の処理をSub(サブプロシージャ)やFunction(関数)に分割して、呼び出す形に変える。どれが適切かはロジックの内容によりますが、Claude Codeに「このコードをリファクタリングして」と依頼すると最適な書き直し方を提案してくれます。
Q. VBAのIf文とSelect Caseはどう使い分ければいいですか?
A. 同一の変数を複数の値・パターンと比較する場合はSelect Caseを使うとコードがすっきりします。例えば都道府県・商品コード・ステータス名など、特定の値と比較する多分岐はSelect Caseが向いています。一方で、異なる変数を組み合わせた条件(And/Or演算子が必要な条件)や、「以上・以下」の範囲比較を複数組み合わせる場合はIf-ElseIfの方が柔軟です。
Q. Claude CodeでVBAのIf文を生成することはできますか?
A. できます。Claude Codeに「売上が100万以上かつ達成率が90%以上なら"ダブル達成"と入力するVBAマクロを書いて」のように日本語で条件と処理を説明するだけで、適切なIf文・ElseIf・論理演算子を使ったVBAコードが生成されます。既存のVBAコードのリファクタリングやエラーの原因解明にも活用できます。
Claude Codeで業務自動化を90日で叩き込む
経営者向けの伴走型パーソナルトレーニング
Claude Code を業務に落とし込む
専門研修コース一覧
受講者本人の業務を題材に、「使いこなせる」状態になるまで伴走する研修プログラム。1対1特化型・ハンズオン・法人講座の3コースを展開中。業務特化・実装まで踏み込むタイプのClaude Code研修です。
研修コース一覧を見る →AI鬼管理へのお問い合わせ
この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。




