エクセルVBA超入門講座(第6回)条件分岐(If文の書き方)

excel-vba-lecture06 Excelマクロ

これまでの講座でセル操作方法、別ファイルの操作方法などVBAを使ったExcelマクロの基礎を解説してきました。

今回は条件分岐について解説します。

これまでは単純にセルに値を入れる方法について解説してきましたが、条件分岐を使えばコンピュータに判定を任せ、処理を行わせることが出来ます。

条件分岐はマクロを使った自動化の第一歩です。

サンプルコードを使って丁寧に解説していきます。

条件分岐(If文)とは

条件分岐とは、ある条件を設定し、条件を満たしている場合/満たしていない場合に応じて処理を分ける方法です。

天馬先生
天馬先生

今日は条件分岐の中のIf文の使い方について解説するよ。

If文はVBAで次のような記載をします。

If 条件式 then
    条件式を満たした場合の処理(処理A)
Else
    条件式を満たさなかった場合の処理(処理B)
End If

IF文の書き方は

  • IFを最初の行に記述する
  • 条件式の後ろにThenを記述する
  • 条件を満たさない場合はElseを記述する
  • End Ifを最後の行に記述する

図で表すと次のようになります。

 

conditional-jump

VBAでは、条件式を満たした場合をTrue、満たさなかった場合はFalseと表現します。

条件分岐としてはIf文の他に「Case文」というものがあります。

Case文については次回の講座で解説します。

If文を使った条件分岐の例

条件分岐を使ったVBAのサンプルを見てみましょう。

次のような成績表があったとします。

before-acceptance

この成績表に対して、70点以上を合格、70点未満を不合格とします。

まずは「たけし」くんの成績を条件分岐(If文)を使って自動判定します。

VBAでは次のように書きます。

estimate-results

記述内容は以下となります。

If Range(“B2”).Value > 70 then
    Range(“C2”).Value = “合格”
Else
    Range(“C2”).Value = “不合格”
End If

マクロ実行結果は次のようになります。

after-acceptance

Rangeを使いましたが、Cellsを使うと次のようになります。

estimate-results2

記述内容は以下となります。

If Cells(2, 3).Value > 70 then
    Cells(2, 3).Value = “合格”
Else
    Cells(2, 3).Value = “不合格”
End If

たけしくんの成績だけを判定しましたが、3名とも判定するVBAは次のようになります。

estimate-results3

記述内容は以下となります。

If Range(“B2”).Value > 70 then
    Range(“C2”).Value = “合格”
Else
    Range(“C2”).Value = “不合格”
End If

If Range(“B3”).Value > 70 then
    Range(“C3”).Value = “合格”
Else
    Range(“C3”).Value = “不合格”
End If

If Range(“B4”).Value > 70 then
    Range(“C4”).Value = “合格”
Else
    Range(“C4”).Value = “不合格”
End If

マクロ実行結果は次のようになります。

after-acceptance4

Range(“B2”).Value >= 70は「B2セルが70点以上だったら条件を満たす」という事を表わしています。

この時使っている「>=」を比較演算子と呼びます。

比較演算子については比較演算子の使い方をご覧ください。

また、複数の条件を組み合わせることも出来ます。

その方法を論理演算子と呼びます。

論理演算子については論理演算子の使い方をご覧ください。

たけし
たけし

おー!こうやって自動で判定できるんですね!

天馬先生
天馬先生

条件分岐を使いこなせれば複雑なマクロも使えるようになるよ!

まずはこのIf文を使いこなせるよう頑張ろう

今回の例では2行目(たけしくん)、3行目(ももこさん)、4行目(カヲルくん)と全て条件文を書きましたが、処理対象が多くなると全ての行に条件文を書くのは大変ですよね。

そこで、同じ処理を繰り返し行う場合、「ループ文」という技術があります。

ループ文については別の講義で解説します。

複数の条件分岐の使い方(ElseIf)

条件式は複数設定することも可能です。

その時使うのがElseIfです

VBAでは次のように表します。

If 条件式① then
    条件式①を満たした場合の処理(処理A)
ElseIf 条件式②
    条件式①は満たさず、条件式②を満たした場合(処理B)
ElseIf 条件式③
    条件式①、②ともに満たさず、条件式③を満たした場合(処理C)
Else
    全ての条件式を満たさなかった場合の処理(処理D)
End If
 

IF文を複数設定する場合の書き方は

  • IFを最初の行に記述する
  • 条件式の後ろにThenを記述する
  • 2つ目以降の条件の前にElseIf を記述する
  • 全ての条件を満たさない場合はElseを記述する
  • End Ifを最後の行に記述する

図で表すと次のようになります。

conditional-jump2

VBAのサンプルは次のようになります。

estimate-results4

記述内容は以下になります。

Sub Estimate_Results()
    If Range(“B2”).Value >= 80 Then
        Range(“C2”).Value = “優”
    ElseIf Range(“B2”).Value >= 70 Then
        Range(“C2”).Value = “良”
    ElseIf Range(“B2”).Value >= 60 Then
        Range(“C2”).Value = “可”
    Else
        Range(“C2”).Value = “不合格”
    End If
End Sub

3名全員の合否判定をVBAで書くと次のようになります。

estimate-results5

マクロ実行結果は次のようになります。

after-acceptance5

比較演算子の使い方

条件式で値を比較するときに比較演算子を使います。

「Aより大きい場合」や「A以下の場合」など、値を比較するときに使います。

VBAで使用する比較演算子は次の表をご覧ください。

比較演算子 条件 例(条件式) 例(意味)
=(等しい) Aの値がBの値と等しい場合 Range(“A1”).Value = 70 A1セルが70と等しい
<>(等しくない) Aの値がBの値と等しくない場合 Range(“A1”).Value <> 100 A1セルが100ではない
>(より大きい) Aの値がBの値より大きい場合 Range(“A1”).Value > 70 A1セルが70より大きい
<(より小さい) Aの値がBの値より小さい場合 Range(“A1”).Value < 70 A1セルが70より小さい
>=(以上) Aの値がBの値以上の場合 Range(“A1”).Value >= 70 A1セルが70以上
<=(以下) Aの値がBの値以下の場合 Range(“A1”).Value <= 70 A1セルが70以下

論理演算子の使い方

条件式で「条件のすべてを満たす」「AまたはBのどちらかを満たす」など複数の条件式を合わせて判定する場合には論理演算子を使います。

VBAで使用する論理演算子は次の表をご覧ください。

論理演算子 条件 例(条件式) 例(意味)
条件A And 条件B AとB両方(全て)の条件を満たす場合 Range(“A1”).Value >= 70 And Range(“B1”).Value < 50 A1セルが70以上でB1セルが50より小さい
条件A Or 条件B AとBいずれかの条件を満たす場合 Range(“A1”).Value >=70 Or Range(“B1”).Value > 60 A1セルが70以上またはB1セルが60より大きい
Not 条件A 条件Aを満たさない場合 Not Range(“A1”).Value =70 A1セルが70に等しくない

例を見てみましょう。

1番目の「And」の例は次のようになります。

estimate-results6

マクロ実行結果は次のようになります。

after-acceptance6

中間試験が80点以上で、かつ期末試験が70点以上はカヲルくんだけです。

次にOrを使った場合のVBAの例です。

estimate-results7

マクロ実行結果は次のようになります。

after-acceptance7

たけしくんは中間試験(B2列)で80点より低いですが、期末試験(C2列)で70点を越えているため

Range(“B2”).Value >= 80(条件A) Or Range(“C2”).Value >= 70(条件B)

のうち、条件Bを満たしているため結果は「合格」となります。

論理演算子は複数設定することも可能です。

estimate-results8

論理演算子Orを3つ組み合わせた例です。

マクロ実行結果は次のようになります。

after-acceptance8

まとめ

条件分岐としてIf文の使い方、条件の判定条件として比較演算子論理演算子の使い方について解説しました。

条件分岐はマクロを使った処理自動化の第一歩となります。

簡単な条件分岐を使ってマクロを作ってみましょう!

次回は条件分岐「Case文」の使い方について解説します。

最後までお読みいただき、ありがとうございました!

~天然マクロ学校~

コメント

タイトルとURLをコピーしました