【ExcelVBA】IF文の使い方とは?様々な条件分岐を実例で紹介

仕事効率化
スポンサーリンク

あなたはVBAでIf文を使って様々な条件分岐を指定したことがありますか?

  • VBAで任意の条件分岐をさせたい
  • And条件やOr条件を指定したい
  • If文の様々な条件分岐を実例付きで知りたい!
と感じることも多いのではないでしょうか。

そこで今回は、各種演算子等も組み合わせたIf文の様々な条件分岐の指定方法をサンプルコード付きで紹介します。

スポンサーリンク

VBAでのIf文の使い方

条件式が一つの場合

  1. 基本構文
If 条件式 Then
    処理1(「条件式 = True」を満たす場合)
Else
    処理2(「条件式 = False」を満たす場合)
End If
  • 「条件式 = True」の場合は「処理1」のみを実行(「処理2」は実行されない)
  • 「条件式 = False」の場合は「処理2」のみを実行(「処理1」は実行されない)
  1. コード例
If 1 + 1 = 2 Then
    MsgBox "「条件式」は正しい数式です。"
Else
    MsgBox "「条件式」は正しい数式ではありません。"
End If
「1 + 1 = 2」は正しい数式なので「True」と判定されます。その場合、「If ~ Then」の次の行の処理が実行されるので、この例では画像の「MsgBox」が表示されます。
01_VBAIf文処理イメージ
また、If文は下記のように1行にまとめて書くこともできます。
  • 1行にまとめたコード例
If 条件式 Then 処理1 Else 処理2
  • If文を1行でまとめて書いた場合、末尾の「End If」は省略される

条件式が複数の場合

  1. 基本構文
If 条件式1 Then
    処理1(「条件式1 = True」を満たす場合)
ElseIf 条件式2 Then
    処理2(「条件式1 = False」かつ「条件式2 = True」を満たす場合)
Else
    処理3(「条件式1 = True」「条件式2 = True」のどちらも満たさない場合)
End If
  • 「条件式1 = True」の場合は「処理1」のみを実行(「処理2」「処理3」は実行されない)
  • 「条件式1 = False」かつ「条件式2 = True」の場合は「処理2」のみを実行(「処理1」「処理3」は実行されない)
  • 「条件式1 = False」かつ「条件式2 = False」の場合は「処理3」のみを実行(「処理1」「処理2」は実行されない)
  • 「ElseIf ~ Then」を複数書けば、さらに条件分岐を増やすことができる
  1. コード例
If 1 + 1 = 3 Then
    MsgBox "「条件式1」は正しい数式です。"
ElseIf 1 + 1 = 2 Then
    MsgBox "「条件式2」は正しい数式です。"
Else
    MsgBox "条件式は全て間違っています。"
End If
「1 + 1 = 3」は間違った数式なので「False」と判定されます。この場合「条件式2」を評価します。「1 + 1 = 2」は正しい数式なので「ElseIf ~ Then」の次の行の処理が実行され、この例では画像の「MsgBox」が表示されます。
02_VBAIf文ElseIf処理イメージ
また、複数条件のIf文は下記のようにまとめて書くこともできます。
  • 1行にまとめたコード例
If 条件式1 Then 処理1
ElseIf 条件式2 Then 処理2
Else: 処理3
  • 「ElseIf」「Else」で改行して書く
  • 「Else」の後ろに複数行を1行にまとめられる「:」(コロン)を入力する
  • 複数条件のIf文を1行でまとめて書いた場合、末尾の「End If」は省略される

条件式を満たさなければ何もしない場合

  1. 基本構文
If 条件式 Then
    処理(「条件式 = True」を満たす場合)
End If
  • 「条件式 = True」の場合は「処理」を実行
  • 「条件式 = False」の場合は何もしない
  1. コード例
If 1 + 1 = 3 Then
    MsgBox "正しい数式です。"
End If
「1 + 1 = 3」は間違った数式なので「False」と判定されます。例では「Else」句を指定していないので「条件式 = False」の場合は何も処理を行いません。

また、複数条件を満たさない場合に何もしない処理は、次のように書くことができます。
  1. 基本構文
If 条件式1 Then
    処理1(「条件式1 = True」を満たす場合)
ElseIf 条件式2 Then
    処理2(「条件式1 = False」「条件式2 = True」を満たす場合)
End If
  • 「条件式1 = True」の場合は「処理1」を実行
  • 「条件式1 = False」かつ「条件式2 = True」の場合は「処理2」を実行
  • 「条件式1 = False」の「条件式2 = False」どちらも満たさない場合は何もしない
  1. コード例
If 1 + 1 = 3 Then
    MsgBox "正しい数式です。"
ElseIf 1 + 1 = 4 Then
    MsgBox "正しい数式です。"
End If
「条件式1」の「1 + 1 = 3」は間違った数式なので「False」と判定されます。次に「条件式2」を評価します。「条件式2」の「1 + 1 = 4」は間違った数式なので「False」となります。例では「Else」句を指定していないので「条件式1 = False」かつ「条件式2 = False」の場合は何も処理を行いません。

VBAでのIf文と組み合わせて使える演算子

If文の条件式には次の演算子が使えます。
  • 論理演算子
  • 比較演算子
  • Like演算子(ワイルドカードと組み合わせ)

論理演算子(And, Or, Not)

演算子詳細
And論理式1 And 論理式2「論理式1 = True」かつ「論理式2 = True」の場合のみ「True」
それ以外は「False」
Or論理式1 Or 論理式2「論理式1 = True」もしくは「論理式2 = True」の場合「True」
どちらも「False」の場合は「False」
NotNot 論理式「論理式 = True」の場合は「False」
「論理式 = False」の場合は「True」

比較演算子(等号・不等号)

等号・不等号詳細
A = B「A」と「B」が等しければ「True」
A <> B「A」と「B」が等しくなければ「True」
A > B「A」より「B」が小さければ「True」
A >= B「A」が「B」以上なら「True」
A < B「A」より「B」が大きければ「True」
A <= B「A」が「B」以下なら「True」

Like演算子とワイルドカードの組み合わせ

Like演算子詳細
A Like B “*”「A」が「B」で始まる値なら「True」
A Like “*” B「A」が「B」で終わる値なら「True」
A Like “*” B “*”「A」に「B」が含まれていれば「True」

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

論理演算子(And, Or, Not)との組み合わせ

「And」

Dim val As Long
val = 10
If 5 <= val And val <= 20 Then
    MsgBox "「val」は「5」以上「20」以下"
End If
「10」を定義したLong型変数「val」と「And」を使って、条件を指定しています。

ここでは、次の2つの論理式を「And」条件で指定しています。
  • 5 <= val
  • val <= 20
つまり「val」が「5」以上かつ「20」以下の場合「True」となり画像のMsgBoxを表示します。
03_VBAIf文AndMsgBox
「〇〇以上◆◆以下」を判定する場合は
  • 「○○ <= 判定対象 And 判定対象 <= ◆◆」
とすると、視覚的に判定範囲がわかり、可読性が上がります。

「And」と「And」

Dim val As Long
val = 11

If val > 10 And Len(CStr(val)) = 2 And Left(val, 1) = 1 Then
    MsgBox "「val」は「10」より大きくかつ「2桁」かつ「1で始まる」数"
End If
「11」を定義したLong型変数「val」と2つの「And」を使って、条件を指定しています。

ここでは、次の3つの論理式を「And」条件で指定しています。
  • val > 10
  • Len(CStr(val)) = 2
  • Left(val1, 1) = 1
つまり「val」が「10」より大きくかつ「2文字(2桁)」かつ「1から始まる」場合「True」となり画像のMsgBoxを表示します。
04_VBAIf文AndAndMsgBox
  • CStr(値)
  • String型に変換された対象「値」を、文字列で返す
  • ex)val:Long型 → CStr(val):String型
  • Len(文字列)
  • 対象「文字列」の文字数を数値で返す
  • ex)Len(“ABCDE”) → 5
  • Left(文字列, 数値)
  • 対象「文字列」を「数値」で指定した文字数だけ左から取り出す
  • ex)Left(“ABCDE”, 3) → “ABC”
Len関数Left関数については、下記でも詳しく解説しているので、読んでみてください。

「Or」

Dim val As Long
val = 10
If val < 0 Or 9 < val Then
    MsgBox "「val」は「0」より小さい、もしくは「9」より大きい(0~9以外の数字)"
End If
「10」を定義したLong型変数「val」と「Or」を使って、条件を指定しています。

ここでは、次の2つの論理式を「Or」条件で指定しています。
  • val < 0
  • 9 < val
つまり「val」が「0」より小さい、もしくは「9」より大きい場合(0~9以外の数値の場合)「True」となり画像のMsgBoxを表示します。
05_VBAIf文OrMsgBox
「〇〇~◆◆以外の数値」を判定する場合は
  • 「判定対象 < ○○ Or ◆◆ < 判定対象」
とすると、視覚的に判定範囲がわかり、可読性が上がります。

「Or」と「Or」

Dim val As Long
val = 10
If val = 0 Or val = 5 Or val = 10 Then
    MsgBox "「val」は「0」もしくは「5」もしくは「10」"
End If
「10」を定義したLong型変数「val」と2つの「Or」を使って、条件を指定しています。

ここでは、次の3つの論理式を「Or」条件で指定しています。
  • val = 0
  • val = 5
  • val = 10
つまり「val」が「0」もしくは「5」もしくは「10」の場合「True」となり画像のMsgBoxを表示します。
06_VBAIf文OrOrMsgBox

「And」と「Or」

Dim val As Long
val = 10
If 20 <= val And val <= 30 Or val = 10 Then
    MsgBox "「val」は「20」以上「30」以下もしくは「10」"
End If
「10」を定義したLong型変数「val」と「And」「Or」を使って、条件を指定しています。

ここでは、次の3つの論理式を「And」条件と「Or」条件で指定しています。
  • 20 <= val
  • val <= 30
  • val = 10
つまり「val」が「20以上30以下」もしくは「10」の場合「True」となり画像のMsgBoxを表示します。
07_VBAIf文AndOrMsgBox

「Not」

Dim val As Long
val = 10
If Not val = 20 Then
    MsgBox "「val」は「20」ではない数"
End If
「10」を定義したLong型変数「val」と「Not」を使って、条件を指定しています。

ここでは、次の論理式を指定しています。
  • Not val = 20
つまり「val」が「20」ではない場合「True」となり画像のMsgBoxを表示します。
08_VBAIf文NotMsgBox

「Not」と「And」

Dim val As Long
val = 10
If Not val = 20 And Not val = 30 Then
    MsgBox "「val」は「20」ではなく、かつ「30」ではない数"
End If
「10」を定義したLong型変数「val」と「Not」「And」を使って、条件を指定しています。

ここでは、次の2つの論理式を「And」条件で指定しています。
  • Not val = 20
  • Not val = 30
つまり「val」が「20」ではなく、かつ「30」ではない場合「True」となり画像のMsgBoxを表示します。
09_VBAIf文NotAndMsgBox
「And」でつないだ論理式のどちらにも否定条件を指定したい場合はそれぞれに「Not」をつける必要があります。

Like演算子とワイルドカードとの組み合わせ

Dim initStr As String
initStr = "A"
Dim str As String
str = "ABCDE"
If str Like initStr & "*" Then
    MsgBox "「str」は「A(= initStr)」で始まる文字"
End If
「”A”」を定義したString型変数「initStr」、「”ABCDE”」を定義したString型変数「str」と「Like」、「ワイルドカード(”*”)」を使って、条件を指定しています。

ここでは、次の論理式を指定しています。
  • str Like initStr & “*”
つまり「str(= “ABCDE”)」が「initStr(= “A”)」から
始まる
場合「True」となり画像のMsgBoxを表示します。
10_VBAIf文LikeMsgBox

If文のネスト

Dim val As Variant
val = 10
If IsNumeric(val) = True Then
    If val > 0 Then
        MsgBox "「val」は正の数"
    End If
Else
    MsgBox "「val」は数値ではない"
End If
「10」を定義したVariant型変数「val」と「If文のネスト(入れ子)」を使って、条件を指定しています。

ここでは、まずはじめに、次の論理式を指定しています。
  • IsNumber(val) = True
「val」が数値の場合「True」となり、次の処理にうつります。

続いて、入れ子の「If文」で次の論理式を指定しています。
  • val > 0
つまり「val」が正の値の場合「True」となり、画像のMsgBoxを表示します。
11_VBAIf文NestMsgBox
  • IsNumeric(判定対象)
  • 「判定対象」を「数値型」に変化できる場合は「True」、それ以外は「False」を返す
  • ex)IsNumeric(10) → True

VBAでのIf文まとめ

今回はVBAのIf文を使った様々な条件分岐の指定方法を紹介いたしました。
VBAのIf文を使った様々な条件分岐
  • 論理演算子(And, Or, Not)との組み合わせ
  • Like演算子とワイルドカードとの組み合わせ
  • If文のネスト
可読性を高めるため、論理演算子を使った「~以上~以下」「~より小さい~より大きい」等の書き方のポイントもあわせて覚えておきましょう。まずは実例通り使ってみると、理解が深まり応用が効くのでおすすめです。

ぜひ使ってみてください。