これまでの講座でセル操作方法、別ファイルの操作方法などVBAを使ったExcelマクロの基礎を解説してきました。
今回は条件分岐について解説します。
これまでは単純にセルに値を入れる方法について解説してきましたが、条件分岐を使えばコンピュータに判定を任せ、処理を行わせることが出来ます。
条件分岐はマクロを使った自動化の第一歩です。
サンプルコードを使って丁寧に解説していきます。
条件分岐(If文)とは
条件分岐とは、ある条件を設定し、条件を満たしている場合/満たしていない場合に応じて処理を分ける方法です。
今日は条件分岐の中のIf文の使い方について解説するよ。
If文はVBAで次のような記載をします。
条件式を満たした場合の処理(処理A)
Else
条件式を満たさなかった場合の処理(処理B)
End If
IF文の書き方は
- IFを最初の行に記述する
- 条件式の後ろにThenを記述する
- 条件を満たさない場合はElseを記述する
- End Ifを最後の行に記述する
図で表すと次のようになります。
VBAでは、条件式を満たした場合をTrue、満たさなかった場合はFalseと表現します。
条件分岐としてはIf文の他に「Case文」というものがあります。
Case文については次回の講座で解説します。
If文を使った条件分岐の例
条件分岐を使ったVBAのサンプルを見てみましょう。
次のような成績表があったとします。
この成績表に対して、70点以上を合格、70点未満を不合格とします。
まずは「たけし」くんの成績を条件分岐(If文)を使って自動判定します。
VBAでは次のように書きます。
記述内容は以下となります。
If Range(“B2”).Value > 70 then
Range(“C2”).Value = “合格”
Else
Range(“C2”).Value = “不合格”
End If
マクロ実行結果は次のようになります。
Rangeを使いましたが、Cellsを使うと次のようになります。
記述内容は以下となります。
If Cells(2, 3).Value > 70 then
Cells(2, 3).Value = “合格”
Else
Cells(2, 3).Value = “不合格”
End If
たけしくんの成績だけを判定しましたが、3名とも判定するVBAは次のようになります。
記述内容は以下となります。
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
マクロ実行結果は次のようになります。
Range(“B2”).Value >= 70は「B2セルが70点以上だったら条件を満たす」という事を表わしています。
この時使っている「>=」を比較演算子と呼びます。
比較演算子については比較演算子の使い方をご覧ください。
また、複数の条件を組み合わせることも出来ます。
その方法を論理演算子と呼びます。
論理演算子については論理演算子の使い方をご覧ください。
おー!こうやって自動で判定できるんですね!
条件分岐を使いこなせれば複雑なマクロも使えるようになるよ!
まずはこのIf文を使いこなせるよう頑張ろう
今回の例では2行目(たけしくん)、3行目(ももこさん)、4行目(カヲルくん)と全て条件文を書きましたが、処理対象が多くなると全ての行に条件文を書くのは大変ですよね。
そこで、同じ処理を繰り返し行う場合、「ループ文」という技術があります。
ループ文については別の講義で解説します。
複数の条件分岐の使い方(ElseIf)
条件式は複数設定することも可能です。
その時使うのがElseIfです
VBAでは次のように表します。
条件式①を満たした場合の処理(処理A)
ElseIf 条件式②
条件式①は満たさず、条件式②を満たした場合(処理B)
ElseIf 条件式③
条件式①、②ともに満たさず、条件式③を満たした場合(処理C)
Else
全ての条件式を満たさなかった場合の処理(処理D)
End If
IF文を複数設定する場合の書き方は
- IFを最初の行に記述する
- 条件式の後ろにThenを記述する
- 2つ目以降の条件の前にElseIf を記述する
- 全ての条件を満たさない場合はElseを記述する
- End Ifを最後の行に記述する
図で表すと次のようになります。
VBAのサンプルは次のようになります。
記述内容は以下になります。
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で書くと次のようになります。
マクロ実行結果は次のようになります。
比較演算子の使い方
条件式で値を比較するときに比較演算子を使います。
「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」の例は次のようになります。
マクロ実行結果は次のようになります。
中間試験が80点以上で、かつ期末試験が70点以上はカヲルくんだけです。
次にOrを使った場合のVBAの例です。
マクロ実行結果は次のようになります。
たけしくんは中間試験(B2列)で80点より低いですが、期末試験(C2列)で70点を越えているため
Range(“B2”).Value >= 80(条件A) Or Range(“C2”).Value >= 70(条件B)
のうち、条件Bを満たしているため結果は「合格」となります。
論理演算子は複数設定することも可能です。
論理演算子Orを3つ組み合わせた例です。
マクロ実行結果は次のようになります。
まとめ
条件分岐としてIf文の使い方、条件の判定条件として比較演算子、論理演算子の使い方について解説しました。
条件分岐はマクロを使った処理自動化の第一歩となります。
簡単な条件分岐を使ってマクロを作ってみましょう!
次回は条件分岐「Case文」の使い方について解説します。
最後までお読みいただき、ありがとうございました!
~天然マクロ学校~
コメント