Excel VBA

エクセルVBAのIf文を紹介します。【プログラムの幅が広がるかも】

エクセルVBAで業務改善プログラムを作成していると絶対といってもいいくらい使用するコードが「If文」です。

条件に応じてプログラムの処理を変更できるので、実務でも役に立ちます。

If文はマクロの記録では作ることができないので、エクセVBAを学習した人だけしか使えないので、スキルアップを実感できる内容だと思います。

とはいえ、本を読んでもイマイチ分かりにくい(やり方は分かるけど、使い道が良く分からない)と感じてしまうプログラムだと思います。

今回は、エクセルVBAのIf文について紹介します。

こんな方におすすめ

  • エクセルVBAを学習し始めた方
  • If文が良く分からない方(書き方・使い道など)
  • エクセルVBA学習を挫折してしまった方
  • スキルアップをしたい方

この記事を読めば、エクセルVBAのIf文について「事務作業の効率化ができる」くらいの知識が付くと思います。

If文について

まずはIf文とは何かについて紹介したいと思います。

If文は英語の意味と同じ

英語で習う「もし~ならば」という意味と同じです。
そのままの意味なのでとても分かりやすいです。


If文の意味が分かるだけでも「よく分からないプログラム」というイメージが和らぐのでは、と思います。

ポイント

普段行うエクセル作業を自動化したいと思いプログラムを作ろうとした時にこのようなことを考えると思います。

  • 作業を手順化(①→②→③・・・)

多くの場合、手順を決めることができるのですが、どうしても「この場合はA処理をしたい」「でも、別の場合はB処理をしたい・・」というように、一通りの処理では足りないことがあります。

そんな時にIf分を使えると、条件に応じて異なる処理を行うプログラムを作れるようになります。

マクロの記録でプログラムを作っている方もいらっしゃると思いますが、If文が使えるようになると「さらに実務に即したプログラムを作成すること」ができるようになります。


If文の基本的な書き方

If文の基本的な書き方を紹介します。

If文だけでなく、エクセルVBAのプログラムは書き方のルールが決まっているので型を覚えてしまえばすぐに使うことができます。

If文の書き方は3パターン

①:条件が1つだけの場合

If 条件 Then
 処理内容
End If

 

②:条件が2つの場合

If 条件 Then
 処理内容
Else
 処理内容
End If

 

③:条件が3つ以上の場合

If 条件1 Then
 処理内容
ElseIf 条件2 Then
 処理内容
Else
 処理内容
End If

 

赤い文字(If、Then、ElseIf、Else、End If)は、決まっている形です。
青い文字(条件)、オレンジ色の文字(処理内容)を自由に変えることで、条件分岐ができるようになります。


順番に紹介していきます。


条件が1つだけの場合

If文の一番シンプルな形(条件が1つだけの場合)の書き方を紹介します。

Sub 条件が1つだけの場合()
  If Sheet1.Range("A1") = 100 Then
    Sheet1.Range("B1") = "完了"
  End If
End Sub


このコードで行っている処理はこちらです。

このプログラムでやっていること

  1. もし、シート1のA1セルの値が100だったら
  2. シート1のB1セルに完了という文字を入力する。
  3. If文おしまい

100という値が入っていれば、となりのセルに「完了」という文字を入力するだけのプログラムです。
当然A1セルに100以外の値が入っている場合には、何も処理がされません。

例えば「進捗管理表」のステータス項目を作成して進捗度が100%になったら完了にする、という方法として使えるかもしれません。
(完了になったものを別シートに移動したり、セルの色をグレーにするなどの処理を組み合わせると実用的なプログラムになるかもしれません)


実行結果はこのようになります。


注意

コード画面で赤文字で書いた部分「If ~Then 、End If」は必須です。
入力しないとエラーになってしまうので、書き忘れに注意が必要です。


条件が2つの場合

実際に業務改善プログラムを作っている時に使うのがこの形です。


Sub 条件が2つの場合()
  If Sheet1.Range("A1") = 100 Then
    Sheet1.Range("B1") = "完了"
  Else
    Sheet1.Range("B1") = "途中"
  End If
End Sub


このコードで行っている処理はこちらです。

このプログラムでやっていること

  1. もし、シート1のA1セルの値が100だったら
  2. シート1のB1セルに「完了」という文字を入力する。
  3. それ以外の場合は
  4. シート1のB1セルに「途中」という文字を入力する。
  5. If文おしまい

条件が1つだけの場合よりもできることが多くなりました。
(進捗管理の場合)進捗度が100%に達していない場合に「途中」という文字を入力することで、ステータスが空欄のものが無くなりました。


実行結果はこのようになります。


100以外の場合は「途中」と入力されました。


ポイント

Elseは「それ以外の場合」を表します。

そのため、If文で条件を指定する際に起こりがちな「条件の漏れ」を防ぐことができます。

※今回のプログラムの場合だと「100以外の場合」なので「A1セルの値が空欄」であっても「途中」という文字が入ってしまいますが、エラーが起こることを防ぐことができます。


条件が3つ以上の場合

条件が3つ以上の場合もプログラムを作成する際によく使います。

Sub 条件が3つ以上の場合()
  If Sheet1.Range("A1") = 100 Then
    Sheet1.Range("B1") = "完了"
  ElseIf Sheet1.Range("A1") = 0 Then
    Sheet1.Range("B1") = "開始"
  Else
    Sheet1.Range("B1") = "途中"
  End If
End Sub


このプログラムで行っている処理はこちらです。

このプログラムで行っていること

  1. もし、シート1のA1セルの値が100だったら
  2. シート1のB1セルに「完了」という文字を入力する。
  3. もし、シート1のA1セルの値が0だったら
  4. シート1のB1セルに「開始」という文字を入力する。
  5. それ以外の場合は
  6. シート1のB1セルに「途中」という文字を入力する。
  7. If文おしまい

(進捗管理表の場合)進捗度が0%のものに「途中」というステータスが入力されてしまうのは避けたいと思った場合などに使えると思います。


注意

条件を追加するElseIfはいくつでも追加することできます。(指定したい条件の数だけ加えることができます)

ElseIfを書くときは、Ifと同様に【ElseIf   条件 Then】と、Thenが必要になることに注意が必要です。


プログラムの実行結果はこのようになります。


A1セルの値が0の場合に「開始」という文字が入力されました。
別の条件が設定できていることが分かると思います。





実用的なプログラムの書き方のヒント

If文の基本的な書き方を紹介しました。
この状態だと「使い方は何となく分かったけど、使い道が分からない・・」だと思います。

ここでは、実用的なプログラムを書く時のIf分の使い方を紹介します。


セルの内容に応じて処理を変更する

一番よく使うのがこちらの場合だと思います。

セルの値の内容に応じて、プログラムの処理方法を変更するというものです。

具体的にはこちらのプログラムがあります。
(エクセルに【0001】と入力すると【1】になってしまう・・【0001】に変換できないだろうか・・という面倒な作業を自動化するプログラムです)

Sub ゼロ埋め()
  Dim lastRow As Long, i As Long
  With Sheet1
    lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
    For i = 2 To lastRow
      If Len(.Cells(i, 1)) < 4 Then
        .Cells(i, 1) = "'" & Format(.Cells(i, 1), "0000")
      Else
        .Cells(i, 1) = "'" & .Cells(i, 1)
      End If
    Next i
  End With
End Sub

少し複雑なプログラムに感じてしまうかもしれませんが、黄色いところにIf文が使われていることが分かれば大丈夫です。

もしゼロ埋めプログラムには、こちらの記事で紹介しています。

こちらもCHECK

【マネするだけ】エクセルVBAでゼロ埋めをする方法を紹介

エクセルで作業をしていると、ゼロが消えてしまうことがあります。 例えば「0001」と入力してEnterキーを押すと「1」になってしまうようなことです。 エクセルが気を利かせてやってくれるのですが、ID ...

続きを見る


If文で何もしない

If文の他の使い方には「If文を使って、ある条件の場合はプログラムを実行しない」というものがあります。

身近な例でいうとこのようなものです。

何もしないが役に立つ場面

  • プログラムを動かすのに必要なデータが入力されていない場合

エクセルVBAのプログラムを動かす前に、必要な情報が入っていないと「エラーが発生してしまい、デバッグ画面が出てしまう」ことがあります。

プログラムの作成に慣れてくると「エラーの原因を確認して修正する」というのが当たり前ですが・・・プログラムを知らない方からするとデバッグ画面はビックリしてしまいます。

そのようなデバッグ画面が出てくるのを避けるために「エラーが起きそうなものに対してIf文の何もしない」をあらかじめ設定しておくのがオススメです。

こちらもCHECK

【属人化対策】エクセルVBAの運用を進める方法【納得感とやさしさが重要】

お仕事で使う頻度の高い「Microsoft Office製品」データ入力・データ集計の場合は「エクセル」が大活躍します。 エクセル業務というと「面倒な作業が多い」というデメリットもあります。仕事が増え ...

続きを見る

エクセルVBAの学習を始めた時は、プログラムを作るので精一杯ですが、慣れてきたらユーザー(プログラムを利用する人)の行動を考えたプログラムを作れるようになるとスキルアップにつながると思います。


「If文で何もしない」の具体的なコードを紹介します。

Sub if文で何もしない()
  If Sheet1.Range("I1") = "" Then
    MsgBox "発行日が空欄です(I1セル)"
    Exit Sub
  End If
End Sub

このプログラムで行っていることはこちらです。

このプログラムで行っていること

  1. もし、シート1のI1セルの値に何も入力されていなかったら
  2. 「発行日が空欄です(I1セル)」というメッセージを表示
  3. プログラムを終了する

いろいろな場面で使えるコードですが、分かりやすい例でいうと「請求書の発行日が空欄のまま発行しないようにする」場合にも使えます。


請求書の発行日を空欄のままプログラムを実行しようとすると「発行日が空欄」というメッセージを表示した後に、プログラムを終了する動作です。

このようにメッセージが表示されます。

もし、請求書を発行(印刷、PDF出力など)の場合、請求書発行日が空欄のまま得意先に送ってしまっては大変です。
プログラムで”うっかりミス”を防止することができます。


If文を書いていて起こるエラーと対策

エクセルVBAでIf文を書いているとエラーが発生することがあります。

これからIf文でプログラムを書く方にエラーとその対策を紹介します。


コンパイルエラー【構文エラー】

プログラムでIf文を書いている時に、発生するエラーに、コンパイルエラー【構文エラー】というものがあります。

プログラムを実行する時に発生

エラーの原因はIf文の構文を間違えているからです。

対策

原因:If文の【Then】を書き忘れている。
対策:基本構文に書き忘れや間違えがないか確認する。


このエラーが発生した時のコードはこちらです。

Sub ifエラー()
  If Sheet1.Range("A1") 'Thenの書き忘れ
    Sheet1.Range("B1") = 1
  End If
End Sub

構文エラーという名前の通り、何か間違えてないか見ればすぐに気が付くと思います。


コンパイルエラー(Ifブロックに対応するEnd Ifがありません)

こちらのエラーも時々見かけます。

If文の構文の書き忘れが原因なので、落ち着いて見直せば解決します。

対策

原因:If文の【End If】を書き忘れている。
対策:基本構文に書き忘れや間違えがないか確認する。


このエラーが発生した時のコードです。

Sub ifエラー()
  If Sheet1.Range("A1") Then
    Sheet1.Range("B1") = 1
        ・・・・ End Ifの書き忘れ
End Sub

End Ifを書かずにプログラムを実行すると、このようなエラーが発生します。


あとがき

今回は、If文の書き方について紹介しました。

If文を書けるようになると、プログラムの幅が広がります。

処理のパターンを考えてプログラムを作った結果、思った通りにプログラムが動くと達成感が感じられます。

お手軽にできる「マクロの記録」ではできないものなので、スキルアップを実感できると思います。

-Excel VBA
-, , ,