【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 = B | AとBが等しい |
A <> B | AとBが等しくない |
A < B | AがBよりも小さい |
A <= B | AがBと等しい、あるいはBより小さい |
A > B | AがBよりも大きい |
A >= B | Aが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を学んでいきましょう。