несколько условий IF, использующих функцию OR, не работают - VBA - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь получить код, чтобы проверить, выполняются ли несколько условий, и если да, то изменить цвет ячейки, но это не работает и выделяет намного больше, чем необходимо.Я не уверен, почему код не работает должным образом:

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

1 Ответ

0 голосов
/ 20 февраля 2019
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

Это говорит:

Если статус вашего дела «Отменено, не применимо» или статус вашего дела «Завершено», или статус вашего дела - любое значение (не пустое), тогда продолжайте.и проверьте, имеет ли состояние вашей программы какое-либо значение (поскольку оно не может быть одновременно «Отменено» и «Завершено» одновременно), а затем выделите его.

Так что на самом деле здесь есть две проблемы.

  1. Ваш Or Cells(i, 8).value <> "" Здесь вы говорите "Передайте эту строку IF как true, если эта ячейка пуста", потому что это OR.Это все равно, что сказать: «Если эта курица красная, или эта курица черная, или эта курица существует», то, если вы тестируете синюю курицу, она пройдет, как есть.

  2. Ваш Cells(i, 23) <> "Cancelled" Or Cells(i, 23) <> "Completed",Если ячейка содержит «Отменено», то ваше второе условие истинно, поскольку оно не говорит «Завершено», поэтому оно проходит.Если ваша ячейка говорит «Завершено», то ваше первое условие проходит, поскольку оно не «Отменено».Если ваша клетка говорит «Booger Farts», то оба условия проходят, поскольку она не «Отменена» и не «Завершена».Так что на самом деле вы хотите AND здесь.

Второй момент трудно уловить, поскольку «ИЛИ» - это не то, как мы будем использовать его на английском языке.Это может помочь думать так: если у нас есть тест, подобный IF condition1 OR condition2 OR condition3, то для выполнения этого условия должно быть выполнено только одно из этих условий.If TRUE OR FALSE OR FALSE проходит.Ваши условия здесь «Не равны», что добавляет путаницу, но вам просто нужно сконцентрироваться на отдельном условии и определить, возвращает ли оно «ИСТИНА» или «ЛОЖЬ», и сделать ваше заявление IF TRUE OR FALSE (проходит) или IF TRUE OR TRUE (проходит) или IF FALSE OR TRUE (проходит) или IF FALSE OR FALSE (наконец-то это не получается!).

Вместо этого вы хотите сказать:

Если заполнен CASE STATUS и если PROGRAM STATUS находится в состоянии PROGRESS, или находится в состоянии ожидания, или находится в состоянии ожидания, и т. Д., То 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...