VBA IF文の使い方(条件分岐)

目次

if文のみ (trueのとき処理する)

条件がtrueの時のみ処理します。falseでは処理しません。

If  条件  Then
  処理
End If

コード

Sub test1()
    Dim num As Integer
    num = 3
    
    If num = 3 Then
        Debug.Print "ok1" 'ok1が出力される
    End If
    
    If num <> 1 Then
        Debug.Print "ok2" 'ok2が出力される
    End If
    
    If num > 2 Then
        Debug.Print "ok3" 'ok3が出力される
    End If
    
    If num >= 3 Then
        Debug.Print "ok4" 'ok4が出力される
    End If
    
    If num < 5 Then
        Debug.Print "ok5" 'ok5が出力される
    End If
    
    If num <= 3 Then
        Debug.Print "ok6" 'ok6が出力される
    End If
End Sub
  • 条件が合致する場合、配下の処理が実行され、if文の処理は終了します。
  • 条件が合致することをtrue(真)ともいいます。
  • 条件が合致しないことをfalse(偽)ともいいます。
  • Excel、Accessとも同じです。

 

ifとelse (trueとfalseそれぞれ処理する)

条件がtrueの時は、trueの処理をします。falseの時は、falseの処理をします。

If (条件) Then
   処理
Else
   処理
End If

コード

Sub test1()
    Dim num As Integer
    num = 2
    
    If num = 3 Then
        Debug.Print "test1"
    Else
        Debug.Print "test2" 'test2が表示される
    End If
End Sub

 

ifとelseifとelse (複数の条件で処理を分ける)

If 条件 Then
  処理
ElseIf (条件) Then
  処理
Else
  処理
End If

複数の条件で処理を分けたい場合に使用します。elseは条件にあてはまらない場合に処理されます。

コード

Sub test1()
    Dim num As Integer
    num = 1
    
    If num = 0 Then
        Debug.Print "0です"
    ElseIf num = 1 Then
        Debug.Print "1です" '1ですが表示される 
    Else
        Debug.Print "それ以外です" 
    End If
End Sub

7行目のif文はtrueになるのでその配下の処理が実行されます。
8行目の処理が実行されif文を抜けます。

  • 条件が合致しない場合、配下の処理は実行されず、その下(ElseIf/Else/if文終了)に進みます。
  • ElseIfは、複数記述できます。省略可です。
  • Elseの処理は、どの条件も合致しなかったときに実行されます。Elseは1つのみ記述できます。省略可能です。

 

if文の中にif文

Sub test1()
    Dim num1, num2 As Integer
    num1 = 1
    num2 = 1
    
    If num1 = 1 Then
        If num2 = 1 Then
            Debug.Print "1です" '1ですが表示される
        End If
    End If
End Sub

7行目は、if文の中にif文を記述しています。ネストの構造です。入れ子ともいいます。
6,7行目は、trueになり文字列が表示されます。

 

値の一部で比較する(like演算子)

like演算子とアスタリスク(*)で、前方一致、部分一致、後方一致の比較ができます。

Sub test1()
    Dim str1 As String
    str1 = "みかん"
 
    If str1 Like "み*" Then
        Debug.Print "OK" 'OKが表示される
    End If
    
    If str1 Like "み*ん" Then
        Debug.Print "OK" 'OKが表示される
    End If
    
    If str1 Like "*かん" Then
        Debug.Print "OK" 'OKが表示される
    End If
    
    If str1 Like "みかん*" Then
        Debug.Print "OK" 'OKが表示される
    End If
End Sub

アスタリスク(*)は、0以上の任意の文字を表します。

 

比較演算子

比較演算子は、2つの値を比べて条件を満たしていればtrue,そうでない場合はfalseを返します。

比較演算子 説明
a = b aとbの値は等しい
a <> b aとbの値は等しくない
a > b aはbより大きい
a >= b aはbより大きい または 等しい
a < b aはbより小さい
a <= b aはbより小さい または 等しい

 

AかつB (論理積のAnd)

if (左の条件式) And (右の条件式) Then

If文でAND演算子を使用する場合、
AND演算子の左の式と右の式の両方が条件に合致する場合にtrueになります。

Sub test1()
    Dim num1, num2 As Integer
    num1 = 2
    num2 = 2
    
    If (num1 = 2) And (num2 = 2) Then
        Debug.Print "OK" 'OKが表示される
    Else
        Debug.Print "NG"
    End If
End Sub

6行目は、左の式と右の式が共にtrueなので、trueになります。

 

AまたはB (論理和のOr)

if (左の条件式) Or (右の条件式) Then

If文でOR演算子を使用する場合、
OR演算子の左の式または右の式のどちらかが条件に合致する場合にtrueになります。

Sub test1()
    Dim num1, num2 As Integer
    num1 = 1
    num2 = 2
    
    If (num1 = 2) Or (num2 = 2) Then
        Debug.Print "OK" 'OKが表示される
    Else
        Debug.Print "NG"
    End If
End Sub

6行目は、左の式はfalseですが右の式がtrueなのでtrueになります。

 

Aではない (論理否定のNot)

if  Not (条件式 ) Then
  • 条件式がfalseの場合にtrueになります。
  • 条件式がtrueの場合にfalseになります。
Sub test1()
    Dim a, b As Integer
    a = 1
    
    If Not (a = 2) Then
        Debug.Print "1" '1が表示される
    End If
    
    If Not (a = 1) Then
        Debug.Print "2"
    Else
        Debug.Print "3" '3が表示される
    End If
End Sub

5行目は値の比較でfalseになり、それを否定するのでtrueになります。
9行目は値の比較でtrueになり、それを否定するのでfalseになります。

関連の記事

VBA Select Case文の使い方(複数の条件分岐)
VBA For文の使い方(処理を繰り返す)

△上に戻る