2015-04-17 5 views
1

Мне нужно настроить условное форматирование для столбца, где каждая ячейка подсвечивается на основе двух других значений, полученных из ячеек в электронной таблице. Значения - это даты. Это необходимо сделать в VBA (по многим причинам: код работает с другим программным обеспечением и очищает содержимое, группирует группы вместе и т. Д.). Я не удался со многими методами и в настоящее время неудачи со следующим:Как условно форматировать столбец в VBA на основе значения каждой ячейки и значения фиксированной ячейки?

Sheets("Trial").Activate 
With ActiveSheet.Range("E:E") 
.Select 
.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, Formula1:="=" 
& (Range("P1").Value - 1), Formula2:="=" & (Range("P1").Value + 6) 
.FormatConditions(1).Interior.Color = RGB(255, 0, 0) 
End With 

В конце концов, мне нужно клетки в столбце Е краснеть, когда значение между P1-1 и P1 + 6. Даже если я извлечу этот код и запускаю его сам по себе, я получаю ошибку вызова процедуры. Мысли?

ответ

0

Пожалуйста, попробуйте:

Sheets("Trial").Activate 
With Columns("E:E") 
.FormatConditions.Add Type:=xlExpression, Formula1:="=AND(E1>=$P$1-1,E1<=$P$1+6)" 
.FormatConditions(1).Interior.Color = 255 
End With 
+0

Я по-прежнему получаю сообщение об ошибке. Я должен добавить, что значения - это даты и отредактируют вопрос, чтобы это отразить. Я попытался использовать переменные даты и вставить их в формулу, указанную выше, с символом &, но она не сработала. – BeSimple

+0

@BeSimple Должен работать, если форматирование в ColumnE такое же, как в P1 (было проверено с датами). Попробуйте форматировать P1 как General и скопируйте значение из ColumnE в него. – pnuts

+1

Да, мне пришлось выстраивать формат даты. Благодаря! – BeSimple

0

Вы не должны даже использовать условное форматирование, если вы не хотите. Вы можете использовать цикл for для циклического прохождения всех значений в столбце E. Возьмите это в качестве примера.

Dim TotalERows As Long 
Dim EValue As Long 
Dim LowerBound As Long 
Dim UpperBound As Long 
LowerBound = Worksheets("Sheet1").Range("P1").Value - 2 
UpperBound = Worksheets("Sheet1").Range("P1").Value + 7 
TotalERows = Worksheets("Sheet1").Range("E" & Rows.Count).End(xlUp).Row 
For I = 1 To TotalERows 
    EValue = Range("E" & I).Value 
     If LowerBound < EValue And EValue < UpperBound Then 
      Range("E" & I).Interior.ColorIndex = 3 
     End If 
Next I 
+0

И если значение в P1 меняется? – pnuts

+0

Это действительно будет проблемой. Я просто подумал, что этот метод может быть интересной альтернативой, если это необходимо. – FairlyLegit

+0

Альтернативы, которые работают (почти!), Всегда приветствуются. Хотя выбор зацикливания, когда это не нужно, является ... странным? Название листа BTW OP - 'Trial'. – pnuts

Смежные вопросы