【VBAリファレンス|実務向け】Excel VBAで「複数条件」をスマートに判定する!If文と論理演算子の活用術

スポンサーリンク

導入:なぜ複数の条件判定が必要なのか

実務でExcelを扱っていると、「AかつBを満たす場合」「AまたはBのいずれかを満たす場合」といった複雑な条件分岐に遭遇することは非常に多いです。Excel関数ではAND関数やOR関数を組み合わせますが、VBAでも同様のロジックを実装することで、データ抽出やエラーチェックの精度が飛躍的に向上します。今回は、VBAで複数条件をスッキリと記述するための「論理演算子」の活用法を解説します。

基礎知識:VBAにおける論理演算子

VBAで複数の条件を判定する際、If文の中で「論理演算子」を使います。
And演算子:すべての条件が真(True)である場合にのみ、処理が実行されます。
Or演算子:いずれか一つの条件が真(True)であれば、処理が実行されます。
これらの演算子をIf文の条件式に組み込むことで、ネスト(入れ子)を深くすることなく、読みやすいコードを書くことができます。

実装:論理演算子を使ったIf文の書き方

例えば、「点数が20点以上」かつ「性別が女性」という条件であれば、以下のように記述します。

If 点数 >= 20 And 性別 = “女” Then
‘ 条件を満たす場合の処理
Else
‘ 条件を満たさない場合の処理
End If

このように記述することで、条件式がひと目で理解できるようになります。

サンプルプログラム:複数条件による判定処理

以下のコードは、シート上のデータをループ処理し、特定の条件を満たす行の氏名をイミディエイトウィンドウに出力する実用例です。

Sub CheckConditions()
Dim i As Long
Dim lastRow As Long

‘ 最終行を取得
lastRow = Cells(Rows.Count, 1).End(xlUp).Row

‘ 5行目から最終行までループ
For i = 5 To lastRow
‘ And演算子で「20点以上 かつ 女性」という条件を判定
‘ Cells(i, 6)は点数、Cells(i, 2)は性別と仮定
If Cells(i, 6).Value >= 20 And Cells(i, 2).Value = “女” Then
‘ 条件一致なら氏名(A列)を表示
Debug.Print “合格者:” & Cells(i, 1).Value
Else
‘ 条件不一致の場合は空欄(または別の処理)
‘ 今回は特に何もしない
End If
Next i

MsgBox “判定が完了しました。”
End Sub

応用・注意点:現場で役立つヒント

1. 括弧の活用
条件式が複雑になってくると、優先順位が分かりにくくなります。`If (A And B) Or C Then` のように括弧を使ってグループ化すると、バグの発生を抑え、可読性が向上します。

2. 文字列の比較には注意
VBAの文字列比較は、デフォルトでは大文字と小文字を区別します(`Option Compare Text`が宣言されていない場合)。「女」と「女 」(スペース入り)のような微細な違いでもFalseになるため、`Trim`関数などで空白を除去してから判定するのが、現場でのトラブル回避のコツです。

3. ネストの回避
`If`の中にさらに`If`を入れる「ネスト」は、3階層を超えるとメンテナンスが困難になります。論理演算子を使って、できる限り条件式をフラットに保つことを心がけましょう。

タイトルとURLをコピーしました