Сравнение двух столбцов и выделение ячейки - PullRequest
0 голосов
/ 18 марта 2019

Я пытаюсь написать VBA для сравнения столбцов AB и AE и проверить, содержит ли столбец AB значение «High», тогда соответствующий столбец AE не должен содержать дату, которая меньше текущей даты - 10 месяцев, в противном случае ячейка должна быть выделена красным. Я попробовал приведенный ниже код, но он выделяет все значения даты.

Dim High As Range
Dim StartDate As Date
For Each High In Range("AB:AB")
    If High.Value = "High" Then
        If Not IsDate(Range("AE" & High.Row) = StartDate - 300) Then
            Range("AE" & High.Row).Interior.Color = 255
        End If
    End If
Next High

Ответы [ 2 ]

0 голосов
/ 18 марта 2019

Код использует OP "Not IsDate (), удаляет дополнительные IF, используя And / Or, используя Offset, назначает вторую переменную как переменную и окрашивает обе ячейки одновременно, используя переменные ячейки и .address.

Dim sDate As Date, cel As Range, cel2 As Range sDate = Дата

With ThisWorkbook.Sheets("Sheet1")
    'loop through each cell in range, does not use lRow variable
    For Each cel In .Range("A2:A" & Cells(Rows.Count, "A").End(xlUp).Row)
        Set cel2 = cel.Offset(, 4) 'Set the second cell variable to column E using offset

        'Use And/Or in the IF statement to test the values in the ranges
        If cel.Value = "High" And (Not IsDate(cel2) Or cel2 < sDate - 300) Then
            'Set both cells color at the same time using the cell address for both variables
            Range(cel.Address & "," & cel2.Address).Interior.Color = vbRed
        End If
    Next cel
End With
0 голосов
/ 18 марта 2019

Как уже упоминалось в Pᴇʜ, вы можете сделать это, используя условное форматирование.Однако, если вы хотите покрасить ячейки один раз, статически отредактируйте ваш код следующим образом:

Dim High As Range
Dim StartDate As Date

StartDate = Date

With Workbooks(REF).Sheets(REF) 'Add correct references

LRow = .Cells(.Rows.Count, "AB").End(xlUp).Row
For Each High In .Range("AB2:AB" & LRow) 'Assuming you have a header row
    If High.Value = "High" Then
        If IsDate(.Range("AE" & High.Row)) = False Then 
            .Range("AE" & High.Row).Interior.Color = vbRed
        Else
            If DateValue(.Range("AE" & High.Row)) < StartDate -300  Then .Range("AE" & High.Row).Interior.Color = vbRed
        End If
    End If
Next High

End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...