Страницы: 1
RSS
VBA. Запись формулы условного форматирования
 
Добрый день уважаемые форумчане!
Хочу макросом задать условное форматирование по нескольким критериям.
Формулу для определения критериев я подготовил, но хотелось бы чтобы одно условие было изменяемым.
Код:
Код
Range("B8:B518").Select
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=И($D8>0;ИЛИ($B8=0;ИЛИ(И($D8>0;$E8=0;$J8=0);И($D8>0;$E8>0;ИЛИ($J8=0;$K8=0));И($D8>0;СУММ($J8:$P8")=0))))"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 255
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = True

Вопрос такой: в конце формулы "И($D8>0;СУММ($J8:$P8")=0)" - P8 ячейка переменная, зависит от количества колонок в таблице. 8 строка в формуле не изменится, надо только менять название столбца.
Я придумал такой вариант:
Код
"=И($D8>0;ИЛИ($B8=0;ИЛИ(И($D8>0;$E8=0;$J8=0);И($D8>0;$E8>0;ИЛИ($J8=0;$K8=0));И($D8>0;СУММ($J8:$" & Cells(8, 15 + Range("O3").Value) & ")=0))))"
где в ячейке О3 - счетчк строк. Таким образом, если в четчике цифра 10, то в формулу должно вставаится Y8 и получиться в итоге: ..... И($D8>0;СУММ($J8:$Y8")=0)

но к сожалению такой трюк не прокатил.
Есть ли другой способ вставить в формулу для УФ переменную?
 
Используйте другой трюк, показанный ниже:
Код
Debug.Print "СУММ($J$8:" & Cells(8, 15 + Range("O3")).Address & ")"
Владимир
 
sokol92,

Можете подсказать как правильно интегрировать его в код?

Ну то есть я понимаю, что он вывел текст в окно Immediate Window и собрал там формулу так, как она должна выглдядеть в итоге. Как теперь из этого окна вывести ее обратно в формулу УФ?
 
Из окна выводить не надо.
Просто аккуратно исправьте фрагмент кода в #1 по образцу конструкции #2 (без Debug.Print)
Владимир
 
sokol92,
Спасибо большое за помощь!
Теперь такая проблема. Он дает абсолютную ссылку:

=.......СУММ($J8:$Y$8)=0)))), есть ли возможность получить $Y8  вместо $Y$8?
 
Решил Сам: в скобках указал - .Address(ColumnAbsolute = True)

Еще раз большое спасибо sokol92, !!
 
Стать указателем на оператор  Address, нажать F1, посмотреть параметры оператора
 
Успехов!
Владимир
Страницы: 1
Наверх