使用OR函数的多个IF语句条件不起作用 - VBA

问题描述 投票:0回答:1

我正在尝试获取代码以检查多个条件是否为真,如果是,则更改单元格的颜色但这不起作用并突出显示超出必要的方式。我不确定为什么代码不能按预期工作:

Sub ConditionCheck()

Dim wb As Workbook
Dim ws As Worksheet
Dim lastrow As Long
Dim rng1 As Range
Dim rng2 As Range
Dim c As Range
Dim d As Range

Set wb = ActiveWorkbook
Set ws = wb.Sheets("Source")
lastrow = Sheets("Source").Cells(Rows.Count, "A").End(xlUp).Row

i = 2

For i = 2 To lastrow

    If Cells(i, 8) = "Cancelled Not Applicable" Or Cells(i, 8) = "Completed" Or Cells(i, 8) <> "" Then
        If Cells(i, 23) <> "Cancelled" Or Cells(i, 23) <> "Completed" Then
            Cells(i, 23).Interior.ColorIndex = 4
        End If
    End If
Next i


End Sub

样本数据:

CASE ID       CASE STATUS                PROGRAM STATUS
10001         Active                     Pending
10002         Completed                  Pending Review
10004         Cancelled Not Applicable   Cancelled
excel vba if-statement condition
1个回答
2
投票
If Cells(i, 8) = "Cancelled Not Applicable" Or Cells(i, 8) = "Completed" Or Cells(i, 8) <> "" Then
    If Cells(i, 23) <> "Cancelled" Or Cells(i, 23) <> "Completed" Then
        Cells(i, 23).Interior.ColorIndex = 4
    End If
End If

这说:

如果您的案例状态为“已取消不适用”或案例状态为“已完成”或您的案例状态为任何值(非空),请继续测试您的程序状态是否为任何值(因为它不能同时为“取消“AND”同时“完成”然后继续并突出显示它。

所以这里真的有两个问题。

  1. 你的Or Cells(i, 8).value <> ""在这里你说“如果这个单元格是空白的那么将这条IF线传递为真”,因为它是一个OR。这就像是说“如果这只鸡是红色的,或者这只鸡是黑色的还是这只鸡存在的话”那么,如果你正在测试一只蓝色的鸡,那么它将会存在。
  2. 你的Cells(i, 23) <> "Cancelled" Or Cells(i, 23) <> "Completed"。如果单元格包含“已取消”,那么您的第二个条件为真,因为它没有说“已完成”,因此通过了。如果您的单元格显示“已完成”,那么您的第一个条件将通过,因为它不是“已取消”。如果你的细胞说“Booger放屁”,那么两种情况都会通过,因为它不是“已取消”,也不是“已完成”。所以你真的想要AND

第二点很难掌握,因为“OR”不是我们如何使用英语。以这种方式思考它可能会有所帮助:如果我们有像IF condition1 OR condition2 OR condition3这样的测试,那么只有其中一个条件需要为真才能通过。 If TRUE OR FALSE OR FALSE通过。你在这里的条件是“不等于”,这增加了混乱,但你只需要专注于个别条件并确定它是否返回“TRUE”或“FALSE”并使你的陈述IF TRUE OR FALSE(通过)或IF TRUE OR TRUE(通过)或IF FALSE OR TRUE(通过)或IF FALSE OR FALSE(最后它失败!)。

相反,你想说:

如果填写了CASE STATUS,并且如果PROGRAM STATUS正在进行或正在等待或等待审核等,则CASE STATUS不能被取消或已完成

所以:

If Cells(i,8).value <> "" AND (Cells(i, 8).value = "Cancelled Not Applicable" OR Cells(i,8).value = "Completed") AND (Cells(i, 23).Value <> "Cancelled" AND Cells(i, 23).Value <> "Completed") Then
    Cells(i, 23).Interior.ColorIndex = 4
End If
© www.soinside.com 2019 - 2024. All rights reserved.