【Excel VBA入門】If文の使い方を解説!条件の書き方をコード例で学ぶ

【Excel VBA入門】If文の使い方を解説!条件の書き方をコード例で学ぶ

こんにちは、業務自動化ツール開発担当の吉池(@valmore_myoshi)です。

今回は条件分岐の基本であるIf文を取り上げたいと思います。

条件にあわせて処理を分けたい

複数の条件に一致したときだけ処理したい

と思ったことはありませんか?そんなときはIf文を使えば解決します。

本記事では、If文の使い方はもちろん、条件分岐でよく使う条件式の例を取り上げて解説します。

If文の使い方

If文は条件にあわせて処理を分けるときに使います。条件には、値の大小や同じ値かの比較が挙げられます。

‘ 条件を満たしたときだけ処理させたい場合
If 条件式 Then
    条件を満たしたときの処理    
End If

‘ 条件を満たさない場合の処理もさせる場合
If 条件式 Then
    条件を満たしたときの処理
Else
    条件を満たさないときの処理
End If

例えば、年齢を例に取り上げてみましょう。ここでは20歳以下のときに未成年と文字列で表示しています。

Dim age As Integer

' 年齢を25歳に設定
age = 25

If age >= 20 Then
    Debug.Print "成年です"
Else
    Debug.Print "未成年です"
End If

条件が複数の場合はElseIf

条件が複数ある場合はElseIf文で処理を分けられます。ElseIf文は一つだけでなく、いくつでも書けます。

If 条件式1 Then
    条件式1を満たしたときの処理
ElseIf 条件式2 Then
    条件式2を満たしたときの処理
Else
    条件を満たさないときの処理
End If

例えば、下記表のような年齢を基準にした区分けを考えてみます。

年齢に応じて処理を分けるには下記のように書きます。

Dim age As Integer

' 年齢を25歳に設定
age = 25

If age <= 18 Then
    Debug.Print age & "歳はこどもです"
ElseIf age > 65 Then
    Debug.Print age & "歳はシニアです"
Else
    Debug.Print age & "歳は大人です"
End If
実行結果

If文とSelect Case文の使い分け

条件分岐を書くにはIf文のほかにもSelect Case文が使えます。Select Caseに続いて比較したい値を指定し、続くCaseに条件を書いていきます。

Select Case 比較する値
    Case 条件1
        条件1を満たしたときの処理
    Case 条件2
        条件2を満たしたときの処理
    Case Else
        いずれの条件も満たさなかったときの処理
End Select

Select Case文の特徴は複数の条件分岐をスッキリ書くことができる点。If文でも同様に書けますが、冗長なコードになりがちです。条件分岐が増えてきたらIf文ではなく、Select Case文を思い出してみてください。

下記の例は同じ処理をIf文とSelect Case文で書いた例です。どちらが見やすいでしょうか?

Dim age As Integer

age = 77

' If文で書いた場合は冗長...
If age = 60 Then
    Debug.Print age & "歳は還暦です"
ElseIf age = 70 Then
    Debug.Print age & "歳は古希です"
ElseIf age = 77 Then
    Debug.Print age & "歳は喜寿です"
ElseIf age = 80 Then
    Debug.Print age & "歳は傘寿です"
Else
    Debug.Print age & "歳の呼び方はありません"
End If

' Select Case文で書くとスッキリ!
Select Case age
    Case 60
        Debug.Print age & "歳は還暦です"
    Case 70
        Debug.Print age & "歳は古希です"
    Case 77
        Debug.Print age & "歳は喜寿です"
    Case 80
        Debug.Print age & "歳は傘寿です"
    Case Else
        Debug.Print age & "歳の呼び方はありません"
End Select

Select Case文について詳しく知りたい方はこちらの記事をご覧ください。
【Excel VBA入門】Select Case文の使い方。複数条件をスッキリ書く!

値を比較するときは比較演算子

If文の書き方でいくつか見てきましたが、条件式では値を比較する比較演算子が使われます。比較結果が真であればTrue、偽であればFalseが返されます。

演算子説明
A = BAとBが等しい
A <> BAとBが等しくない
A < BAがBよりも小さい
A <= BAがBと等しい、あるいはBより小さい
A > BAがBよりも大きい
A >= BAがBと等しい、あるいはBより大きい

文字列を比較する

文字列では、比較対象と等しいか否かで処理を分けるときによく使われます。例として2つの文字列を比較してみます。大文字と小文字も区別する点に要注意!

Dim message1 As String, message2 As String

message1 = "I study VBA everyday!!"
message2 = "I study vba everyday!!"
    
If message1 = message2 Then
    Debug.Print "同じ文字列です"
Else
    Debug.Print "異なる文字列です"
End If
実行結果

オブジェクトを比較するときはIsを使う

オブジェクト同士を比較したいときもあるはずです。そんなときはIs演算子を使いましょう。

例えばRangeオブジェクトのFindメソッドで特定の値を見つけるときを取り上げてみます。Findメソッドは値が見つかればRangeオブジェクトを返し、見つからなければNothingを返します。

If Cells.Find("りんご") Is Nothing Then
    Debug.Print "「りんご」という値のセルは見つかりません"
End If

複数の条件に一致させるときは論理演算子

複数の条件に一致させたいときは論理演算子を使います。演算子を組み合わせることで複雑な条件分岐にも対応できます。

演算子説明
条件式1 And 条件式2条件式1と条件式2を両方満たす
条件式1 Or 条件式2条件式1あるいは条件式2のいずれかを満たす
Not 条件式1条件式1を満たさない

すべての条件に一致させるならAnd演算子

すべての条件を満たす必要があるならAnd演算子を使います。先ほども例に取り上げた年齢区分から大人を判定する処理を考えてみましょう。

大人は19歳以上、そして65歳以下という2つの条件を満たす必要があることがわかります。これらの条件をAnd演算子を使って書くと以下のようになります。

Dim age As Integer

' 年齢を25歳に設定
age = 25

If age >= 19 And age <= 65 Then
    Debug.Print age & "歳は大人です"
End If
実行結果

ひとつでも条件を満たせばいいならOr演算子

条件が複数あるうちの一つでも満たせばいいならOr演算子を使います。

例えば、下記表のような社員表から第1営業部と第2営業部を取り出す処理を考えてみます。

所属している部署が第1営業部あるいは第2営業部のいずれかを満たすと考えると下記のように書けます。

Dim i As Integer

' 社員表の2行目から8行目を調べる
For i = 2 To 8
    If Cells(i, 1) = "第1営業部" Or Cells(i, 1) = "第2営業部" Then
        Debug.Print Cells(i, 2) & "は" & Cells(i, 1) & "です"
    End If
Next
実行結果

条件を反転させるならNot演算子

条件に一致しないときだけ処理したいとき、ありますよね。そんなときはNot演算子を使います。特定の条件を満たさないときだけ処理できます。

下記のような社員表を例に取り上げてみます。第2営業部がなくなり、すべて第1営業部に書き換えるにはどうすればいいでしょうか。

部署名が第1営業部でないものと考えると、下記のように書けます。

Dim i As Integer

' 社員表の2行目から8行目を調べる
For i = 2 To 8
    ' 部署名が第1営業部でなければ書き換える
    If Not Cells(i, 1).Value = "第1営業部" Then
        Cells(i, 1).Value = "第1営業部"
    End If
Next

まとめ

条件分岐の基本であるIf文について解説しました。If文を使えば1つの条件だけでなく、複数の条件にあわせて処理を分けられます。さらに論理演算子を組み合わせることで、複雑な条件にも対応可能。

条件分岐させる方法はほかにもありますが、If文を使う頻度が一番多いです。まずは基本から一つひとつVBAを学んでいきましょう。