vba excel, как проверить, не пуста ли ячейка, и покрасить всю строку?

у меня есть код VBA, который сравнивает даты пользовательского ввода с текущими датами и заполняет фон соответствующим цветом. все нормально работает.

теперь мне нужно, чтобы система проверяла, не является ли ячейка в столбце F выбранной строки не пустой, мне нужно раскрасить столбец D,E,F серого цвета.

код:

Private Sub CommandButton1_Click()

    Dim i As Integer

    For i = Range("C5000").End(xlUp).Row To 2 Step -1 'Range upto 5000, chnge this as per your requirment'

        If IsEmpty(Cells(i, 3)) Then
            Cells(i, 3).Interior.Color = xlNone

        ElseIf (VBA.CDate(Cells(i, 3)) - VBA.Date()) < 0 Then
            Cells(i, 3).Interior.Color = vbGreen

        ElseIf (VBA.CDate(Cells(i, 3)) - VBA.Date()) = 0 Then
            Cells(i, 3).Interior.Color = vbYellow

        ElseIf (VBA.CDate(Cells(i, 3)) - VBA.Date()) >= 1 And (VBA.CDate(Cells(i, 3)) - VBA.Date()) <= 4 Then
            Cells(i, 3).Interior.Color = vbRed

        ElseIf (VBA.CDate(Cells(i, 3)) - VBA.Date()) >= 5 And (VBA.CDate(Cells(i, 3)) - VBA.Date()) <= 10 Then
            Cells(i, 3).Interior.Color = vbCyan

        Else
            Cells(i, 3).Interior.ColorIndex = xlNone

        End If

    Next

End Sub

буду признателен за любую помощь


person Dany 7elo    schedule 18.10.2017    source источник
comment
использовать условное форматирование   -  person Rosetta    schedule 18.10.2017
comment
@Rosetta нет, мне нужно добавить это в свой код   -  person Dany 7elo    schedule 18.10.2017
comment
if cells(i,6) <> "" then cells(i,3).entirerow.interior.color = vbRed... это решает вашу проблему?   -  person Rosetta    schedule 18.10.2017
comment
@Dany7elo смотрите мой ответ и код ниже   -  person Shai Rado    schedule 18.10.2017


Ответы (2)


Вам также необходимо проверить, есть ли Trim(Range("F" & i).Value) <> "" в соответствующих критериях.

Я также изменил логику вашего текущего кода, чтобы он был короче и быстрее выполнялся (переключился на Select Case и т. д.).

Код

Private Sub CommandButton1_Click()

Dim i As Long
Dim NumofDays As Long

For i = Range("C5000").End(xlUp).Row To 2 Step -1 'Range upto 5000, chnge this as per your requirment'
    Cells(i, 3).Interior.Color = xlNone ' set as inital color, only change if all criterias are met

    NumofDays = CDate(Cells(i, 3)) - Date

    Select Case NumofDays
        Case Is < 0
            Cells(i, 3).Interior.Color = vbGreen

        Case 0
            Cells(i, 3).Interior.Color = vbYellow

        Case 1 To 4
            Cells(i, 3).Interior.Color = vbRed

        Case 5 To 10
            Cells(i, 3).Interior.Color = vbCyan

    End Select

    ' your 2nd criteria to color the entire row if "F" is not empty
    If Trim(Range("F" & i).Value) <> "" Then Range("D" & i & ":F" & i).Interior.Color = ... ' selectyourcolor 
Next i

End Sub
person Shai Rado    schedule 18.10.2017
comment
я не хочу, чтобы вся строка была окрашена в зеленый или красный цвет... если я хочу просто заполнить столбец D,E,F серым цветом, а остальная часть столбца останется прежней в моем коде... я отредактирую свой вопрос - person Dany 7elo; 18.10.2017
comment
@Dany7elo смотрите отредактированный код, замените часть, которую я написал ... ' selectyourcolor, на цвет, который вы хотите туда поместить. - person Shai Rado; 18.10.2017
comment
ваш код работает, но все еще есть одна проблема: даже если ячейка (i, 3) пуста, ячейка будет окрашена в зеленый цвет.... ЧТО Я ХОЧУ, если (i, 3) пуст, не должен быть окрашен - person Dany 7elo; 18.10.2017
comment
по этой причине я думаю, что оператор IF будет лучше, верно? - person Dany 7elo; 18.10.2017
comment
да, я сказал вам, что это работает отлично, но все еще есть эта проблема - person Dany 7elo; 18.10.2017

Условное форматирование проще всего, просто несколько кликов.

  1. Начните с выбора ячеек, цвет фона которых вы хотите изменить.
  2. Создайте новое правило форматирования, нажав «Условное форматирование» > «Новое правило...» на вкладке «Главная».
  3. На вкладке «Главная» нажмите «Условное форматирование» > «Новое правило». В открывшемся диалоговом окне «Новое правило форматирования» выберите параметр «Использовать формулу для определения форматируемых ячеек» и введите следующую формулу в поле «Форматировать значения». где эта формула верна" поле: =$C2>4
  4. Откройте диалоговое окно «Новое правило форматирования» и введите нужную формулу. Вместо C2 вы вводите ячейку, содержащую значение, которое вы хотите проверить в своей таблице, и ставите нужное число вместо 4. И, естественно, вы можете использовать знак меньше (‹) или знак равенства (=), чтобы ваши формулы будет читать =$C2‹4 и =$C2=4 соответственно.
  5. Кроме того, обратите внимание на знак доллара $ перед адресом ячейки, вам нужно использовать его, чтобы сохранить букву столбца одинаковой, когда формула копируется по строке. На самом деле, это то, что делает трюк и применяет форматирование ко всей строке на основе значения в данной ячейке.
  6. Нажмите кнопку «Формат...» и перейдите на вкладку «Заливка», чтобы выбрать цвет фона. Если цветов по умолчанию недостаточно, нажмите кнопку «Другие цвета...», чтобы выбрать тот, который вам нравится, а затем дважды нажмите «ОК».
person ashleedawg    schedule 18.10.2017
comment
Я думаю, что вопрос был в том, чтобы сделать условное форматирование программно. - person Nelda.techspiress; 11.06.2019