あなたはVBAでIf文を使って様々な条件分岐を指定したことがありますか?
- VBAで任意の条件分岐をさせたい
- And条件やOr条件を指定したい
- If文の様々な条件分岐を実例付きで知りたい!
そこで今回は、各種演算子等も組み合わせたIf文の様々な条件分岐の指定方法をサンプルコード付きで紹介します。
VBAでのIf文の使い方
条件式が一つの場合
- 基本構文
If 条件式 Then
処理1(「条件式 = True」を満たす場合)
Else
処理2(「条件式 = False」を満たす場合)
End If
- 「条件式 = True」の場合は「処理1」のみを実行(「処理2」は実行されない)
- 「条件式 = False」の場合は「処理2」のみを実行(「処理1」は実行されない)
- コード例
If 1 + 1 = 2 Then
MsgBox "「条件式」は正しい数式です。"
Else
MsgBox "「条件式」は正しい数式ではありません。"
End If
「1 + 1 = 2」は正しい数式なので「True」と判定されます。その場合、「If ~ Then」の次の行の処理が実行されるので、この例では画像の「MsgBox」が表示されます。また、If文は下記のように1行にまとめて書くこともできます。
- 1行にまとめたコード例
If 条件式 Then 処理1 Else 処理2
- If文を1行でまとめて書いた場合、末尾の「End If」は省略される
条件式が複数の場合
- 基本構文
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」を複数書けば、さらに条件分岐を増やすことができる
- コード例
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」が表示されます。また、複数条件のIf文は下記のようにまとめて書くこともできます。
- 1行にまとめたコード例
If 条件式1 Then 処理1
ElseIf 条件式2 Then 処理2
Else: 処理3
- 「ElseIf」「Else」で改行して書く
- 「Else」の後ろに複数行を1行にまとめられる「:」(コロン)を入力する
- 複数条件のIf文を1行でまとめて書いた場合、末尾の「End If」は省略される
条件式を満たさなければ何もしない場合
- 基本構文
If 条件式 Then
処理(「条件式 = True」を満たす場合)
End If
- 「条件式 = True」の場合は「処理」を実行
- 「条件式 = False」の場合は何もしない
- コード例
If 1 + 1 = 3 Then
MsgBox "正しい数式です。"
End If
「1 + 1 = 3」は間違った数式なので「False」と判定されます。例では「Else」句を指定していないので「条件式 = False」の場合は何も処理を行いません。また、複数条件を満たさない場合に何もしない処理は、次のように書くことができます。
- 基本構文
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」どちらも満たさない場合は何もしない
- コード例
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」 |
Not | Not 論理式 | 「論理式 = 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
「〇〇以上◆◆以下」を判定する場合は
- 「○○ <= 判定対象 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
- CStr(値)
- String型に変換された対象「値」を、文字列で返す
- ex)val:Long型 → CStr(val):String型
- Len(文字列)
- 対象「文字列」の文字数を数値で返す
- ex)Len(“ABCDE”) → 5
- Left(文字列, 数値)
- 対象「文字列」を「数値」で指定した文字数だけ左から取り出す
- ex)Left(“ABCDE”, 3) → “ABC”
「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
「〇〇~◆◆以外の数値」を判定する場合は
- 「判定対象 < ○○ 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
「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
「Not」
Dim val As Long
val = 10
If Not val = 20 Then
MsgBox "「val」は「20」ではない数"
End If
「10」を定義したLong型変数「val」と「Not」を使って、条件を指定しています。ここでは、次の論理式を指定しています。
- Not val = 20
「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
「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 & “*”
始まる場合「True」となり画像のMsgBoxを表示します。
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
続いて、入れ子の「If文」で次の論理式を指定しています。
- val > 0
- IsNumeric(判定対象)
- 「判定対象」を「数値型」に変化できる場合は「True」、それ以外は「False」を返す
- ex)IsNumeric(10) → True
VBAでのIf文まとめ
今回はVBAのIf文を使った様々な条件分岐の指定方法を紹介いたしました。VBAのIf文を使った様々な条件分岐
可読性を高めるため、論理演算子を使った「~以上~以下」「~より小さい~より大きい」等の書き方のポイントもあわせて覚えておきましょう。まずは実例通り使ってみると、理解が深まり応用が効くのでおすすめです。- 論理演算子(And, Or, Not)との組み合わせ
- Like演算子とワイルドカードとの組み合わせ
- If文のネスト
ぜひ使ってみてください。