VBA⑦|構文のルール・その3|条件分岐(If文)と論理演算子を使いこなそう!
~「もし~なら」の考え方で、マクロがもっと柔軟になる~
◆ はじめに:マクロに“判断力”を持たせよう
前回は、VBAにおける変数とデータ型について学びました。
今回は、いよいよプログラムの核となる「条件分岐(If文)」です。
「もし●●だったら△△する」
これができるようになると、マクロはグンと賢くなります!
◆If文とは?かんたんに言うと…
ある条件が成り立つときだけ、特定の処理を実行する命令
まさに「判断の道しるべ」。
ユーザーの入力や、セルの値などをもとに、動作を切り替えることができます。
◆基本構文
If 条件 Then
実行する処理
End If「条件」に合致する場合は、「実行する処理」を行う。
もし、「条件」に合致しない場合は「実行する処理」は行わない。
条件の判断と、合致した場合の処理を書くのが基本です。
使用例:数値が100を超えていたらメッセージを表示
Dim total As Long
total = Range("A1").Value
If total > 100 Then
MsgBox "100を超えています!"
End If条件:total > 100
成立時:メッセージ表示 "100を超えています!"
◆If~Else:条件に合わない場合の処理も書ける
最初に条件に合致しない場合は処理をしないと書きましたが、「Else」を追加することで合致しない場合に「実行する処理」を行うこともできます。
If 条件 Then
条件がTrueのときの処理
Else
条件がFalseのときの処理
End If使用例:合格・不合格を判定
Dim score As Long
score = Range("B2").Value
If score >= 60 Then
MsgBox "合格です!"
Else
MsgBox "残念、不合格です。"
End If「score」が60以上の場合は、メッセージ表示"合格です!"
60以上ではない場合は、メッセージ表示"不合格です!"
◆複数条件を設定する方法①
If~ElseIf or If~Else If~
If~Endの中に、さらにIf文を書くことで、複数の条件設定が可能です。
①
If 条件1 Then
処理1
ElseIf 条件2 Then
処理2
Else
条件3
End If又は②
If 条件1 Then
処理1
Else
If 条件2 Then
処理2
Else
処理3
End If
End If ①と②は処理の結果としては同じです。
「条件1」に合致すれば「処理1」を行う。
「条件1」に合致しない場合に、「条件2」に合致する場合は「処理2」を行う。
どちらの条件にも合致しない場合は「処理3」を行う。
可読性が高いのは①「ElseIf」を使う書き方ですので、通常は①のように書きます。
一つのIf文の中に「ElseIf」をいくつ書いても、End Ifは最後に1つ書けば良いです。
②は階層的な条件と処理の流れを明示したいときの書き方ですが、If文ごとにEnd Ifも書かないとエラーになりますので注意は必要です。
②の書き方をIfの中にIfを使うネスト構造といいますが、それを使う場合の例として③
If 条件1 Then
If 条件2 Then
処理1
Else
処理2
End If
Else
処理3
End If ③の書き方だと一見①、②と似ていますが処理がまったく違います。
「条件1」に合致すれば「条件2」の判断を行う。
「条件2」に合致した場合は「処理1」を行い、合致しない場合は「処理2」を行う。
「条件1」合致しない場合は「処理3」を行う。
行われる処理を基準で書くと、
①、②の場合
処理1:「条件1」に合致する場合のみ行う
処理2:「条件1」に合致せず、「条件2」に合致する場合のみ行う
処理3:「条件1」、「条件2」の両方に合致しない場合のみ行う
③の場合は
処理1:「条件1」と「条件2」の両方に合致する場合のみ行う
処理2:「条件1」に合致して、「条件2」に合致しない場合のみ行う
処理3:「条件1」に合致しない場合のみ行う
このように、複数の条件を書く場合は、その条件文を書く位置にも注意が必要です。
◆複数条件を設定する方法②
論理演算子を使う方法
条件設定をする場合、○○以上○○未満の場合とか、値Aが▲▲で値Bが◆◆の場合に処理するとかいった時に、論理演算子を使うことで条件設定ができます。
論理演算子とその説明、使用方法を以下に書きます。
And(両方が真なら真):
If x > 50 And y < 10 Then
処理1
End Ifxが50より大きく、yが10より小さい。両方が合致する場合のみ処理する
「And」の左と右の条件判断の結果で、両方とも真であれば処理する。
Or(どちらかが真なら真):
If x = 0 Or y = 0 Then
処理1
End Ifxが0又は、yが0のどちらかが合致すれば処理する
「Or」の左と右の条件判断の結果で、どちらかが真であれば処理する。
このように複数のIf文を書かなくても複数の条件判断をさせることができます。
論理演算子は他に
Not(条件の反対を意味する):
If Not IsEmpty(Range("A1")) Then
処理1
End IfRange("A1")の値が、Empty(値が空)ではない場合に処理をする
「Not」の左側の条件判断が真なら偽に、偽なら真として扱う
論理演算子は、一行で繋げて条件設定も可能です。
使用例:
If (x > 50 And y < 10) or (y = 0 And Not IsEmpty(Range("A1"))) Then
処理1
End IfVBAにおける論理演算子には優先順位があります。
優先順位は・・
①Not:否定
②And:論理積(かつ)
③Or:論理和(または)
使用例ですと・・
① Not IsEmpty(Range("A1"))
②If x > 50 And y < 10 と y = 0 And Not IsEmpty(Range("A1"))
③① Or ②
処理1が実行されるには・・
xが50より大きくてyが10より小さい場合、又は、yが0でRange("A1")の値が空でない場合のみ。
例えば、yが11だった場合は他の条件が真でも処理はされない。
あと、Orの左右の条件を括弧で囲む必要はないのですが、明示的に論理演算子の処理対象を理解するためにも処理単位で括弧を付ける癖は付けましょう。
◆まとめ
If文=マクロに判断をさせるコマンド
シンプルな構文ながら、柔軟で強力な分岐が可能
他の要素(変数、演算子)と組み合わせて使おう
次回は、VBAで頻出の繰り返し処理を、初心者にもわかりやすく解説します!
この記事が役に立った方は「スキ」やブックマークをお願いします。
いいなと思ったら応援しよう!
応援ありがとうございます!