見出し画像

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 If

xが50より大きく、yが10より小さい。両方が合致する場合のみ処理する
「And」の左と右の条件判断の結果で、両方とも真であれば処理する。


Or(どちらかが真なら真):

If x = 0 Or y = 0 Then
   処理1
End If

xが0又は、yが0のどちらかが合致すれば処理する
「Or」の左と右の条件判断の結果で、どちらかが真であれば処理する。

このように複数のIf文を書かなくても複数の条件判断をさせることができます。


論理演算子は他に

Not(条件の反対を意味する):

If Not IsEmpty(Range("A1")) Then
  処理1
End If

Range("A1")の値が、Empty(値が空)ではない場合に処理をする
「Not」の左側の条件判断が真なら偽に、偽なら真として扱う


論理演算子は、一行で繋げて条件設定も可能です。

使用例:

If (x > 50 And y < 10) or (y = 0 And Not IsEmpty(Range("A1"))) Then
    処理1
End If

VBAにおける論理演算子には優先順位があります。
優先順位は・・
①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で頻出の繰り返し処理を、初心者にもわかりやすく解説します!
この記事が役に立った方は「スキ」やブックマークをお願いします。




いいなと思ったら応援しよう!

Rin Sumi Zeal 応援ありがとうございます!