【VBA】AND/OR 条件を使って複雑な判定を行う方法

条件付き書式では、単純な「セルの値が〇〇なら強調」だけでなく、複数条件を組み合わせた判定も可能です。
その際に使うのが AND や OR 関数 です。


1. 基本の考え方

  • AND関数
    複数の条件がすべて満たされた場合に TRUE となる。=AND($B2="未処理",$C2<DATE(2025,4,1)) → B列が「未処理」かつ C列が 2025/4/1 より前なら条件成立
  • OR関数
    複数の条件のうち1つでも満たされた場合に TRUE となる。=OR($D2="高",$E2>100) → D列が「高」または E列が100超なら条件成立

2. VBAコード例(AND条件)

「B列が『未処理』かつ C列の日付が4月1日以前なら行全体を灰色にする」例です。

Sub 条件付き書式_AND条件()
    Dim rng As Range
    Set rng = Range("A2:E20")
    
    rng.FormatConditions.Add _
        Type:=xlExpression, _
        Formula1:="=AND($B2=""未処理"", $C2<DATE(2025,4,1))"
    
    rng.FormatConditions(1).Interior.Color = RGB(200, 200, 200)
End Sub

3. VBAコード例(OR条件)

「D列が『高』または E列が100を超える場合に行全体を黄色にする」例です。

Sub 条件付き書式_OR条件()
    Dim rng As Range
    Set rng = Range("A2:E20")
    
    rng.FormatConditions.Add _
        Type:=xlExpression, _
        Formula1:="=OR($D2=""高"", $E2>100)"
    
    rng.FormatConditions(1).Interior.Color = RGB(255, 255, 150)
End Sub

4. AND/OR の組み合わせ

もちろん、AND と OR を組み合わせてさらに複雑な条件を作ることも可能です。

例:「B列が『未処理』かつ(C列が4月1日以前 または D列が『高』)」なら赤色にする

Sub 条件付き書式_AND_OR組み合わせ()
    Dim rng As Range
    Set rng = Range("A2:E20")
    
    rng.FormatConditions.Add _
        Type:=xlExpression, _
        Formula1:="=AND($B2=""未処理"", OR($C2<DATE(2025,4,1), $D2=""高""))"
    
    rng.FormatConditions(1).Interior.Color = RGB(255, 150, 150)
End Sub

5. ポイント

  • 数式条件は「TRUE/FALSE」を返す式にする
  • **カンマ区切り(,)**で条件を並べる(Excelの地域設定によっては ; の場合もあり)
  • 複雑な条件でも 括弧を意識して優先順位を明確にするとエラーを防げる

6. まとめ

  • AND → 複数条件すべてを満たす場合
  • OR → 複数条件のうち1つでも満たす場合
  • 組み合わせれば、実務的な「ステータス・日付・金額などを総合判定」した条件付き書式が可能

コメント

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