Как раскрасить ячейки в зависимости от условий? - PullRequest
1 голос
/ 01 июля 2019

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

For loopctr = 14 To 434
Dim gooddate As String
goodate = "O14"
Dim baddate As String
baddate = "P14"
If baddate > gooddate Then
Range("P14").Select
With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent6
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With


End If

Next

У меня не работает цикл, как мне сделать так, чтобы он проходил по всем строкам. Я заставил его работать через условное форматирование и запись макроса его создания.

Ответы [ 4 ]

0 голосов
/ 01 июля 2019

Для эквивалентных данных и результатов для @ GMalc * A работают следующие правила формулы CF:

Красный: =C1>B1, Зеленый: =AND(C1<>"",C1<B1)

применительно к ColumnC.Подробности того, как применить CF здесь .

0 голосов
/ 01 июля 2019

Надеюсь, я правильно понимаю ваш вопрос. Вам не нужны переменные, но если вы хотите их, вам нужно создать их вне цикла. В этом коде x - это строка, которая продолжает меняться с каждым циклом, а 15, 16 - это столбцы O & P. ​​

For x = 14 To 434

   If CDate(Cells(x,16).Value) > CDate(Cells(x,15).Value) Then

       With Cells(x,16).Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorAccent6
       End With

   End If

Next x
0 голосов
/ 01 июля 2019

Вот базовое решение VBA;с заголовками столбцов в строке 1 и возможными пустыми ячейками в столбце;этот макрос будет сравнивать даты в столбце Reschedule date с датами в столбце слева.Если дата новее, чем дата в левом столбце, она закрасит ячейку Red.Если дата старше, чем дата в левом столбце, она закрасит ячейку Green.Смотрите прикрепленное изображение ...

Dim tCol As Long, cel As Range

    With Worksheets("Sheet2")
    'use find to identify the column number
    tCol = .Rows(1).Find("Reschedule date", , xlFormulas, xlWhole, xlByRows, xlPrevious).Column

        'loop through each cell in the column from row to the last used row
        For Each cel In .Range(.Cells(2, tCol), .Cells(.Rows.Count, tCol).End(xlUp))
            'test each cel; if not empty and the cel value is less then the
            'value of the cell on the left, then color the cel green
            If cel.Value <> "" And cel.Value < cel.Offset(, -1).Value Then
                cel.Interior.ColorIndex = 4

            'elseif test each cel; if not empty and the cel value is greater then the
            'value of the cell on the left, then color the cel red
            ElseIf cel.Value <> "" And cel.Value > cel.Offset(-1).Value Then
                cel.Interior.ColorIndex = 3

            End If

        Next cel 'loop to the next cel
    End With

enter image description here

0 голосов
/ 01 июля 2019

Похоже, вам просто нужно использовать условное форматирование, чтобы установить правило выделения ячеек, чтобы выделить ячейки, которые больше или меньше, чем.Или вы можете установить более сложное правило, используя формулу, выбрав Дополнительные правила, а затем «Использовать формулу, чтобы определить, какие ячейки форматировать».

Настройте свои правила в первой ячейке столбца «Дата переноса»(P14), сравнивая его с первой ячейкой столбца «Квитанция» (O14), и, если вы довольны результатами, используйте «Редактор формата», чтобы скопировать форматирование в остальные ячейки столбца «Дата переноса».

Вам понадобятся два правила.Вот скриншоты о том, как установить их в ячейке P14: enter image description here

enter image description here

enter image description here

Конечный результат должен выглядеть так, как только форматирование размечено по всем ячейкам:

...