Эд задал вопрос об Excel на этой неделе.
Мне нужен простой макрос Excel, который будет искать, скажем, в столбце C и выделять красным цветом ячейки, содержащие сегодняшнюю дату (текущую дату), и выделять желтым любую другую ячейку в столбце, которая находится через 15 дней в будущем от сегодняшней даты?
Пользователи Excel 97 или Excel 2000 могут воспользоваться новой опцией условного форматирования. Давайте сначала рассмотрим, как это сделать вручную без макроса.
- Перейти в ячейку C1.
- В меню выберите Формат, Условный формат
- В левой части диалогового окна измените раскрывающийся список на «Формула».
- В правой части диалогового окна введите:
=INT(C1)=TODAY()

- Щелкните формат, щелкните "Узоры", выберите "Красный". Нажмите ОК
- Нажмите Добавить…
- В левой части диалогового окна измените раскрывающийся список на «Формула».
- В правой части диалогового окна введите:
=AND(INT(C1)>TODAY(),(INT(C1)-TODAY())<16)
- Щелкните Формат, щелкните Узоры, выберите желтый. Щелкните ОК.
- Нажмите кнопку ОК, чтобы завершить присвоение этого условного формата ячейке C1.

Если формат введен правильно, ячейка C1 станет красной, если она содержит сегодняшнюю дату, и желтой, если дата находится в следующих 15 неделях. Функция СЕГОДНЯ () в формате гарантирует, что если мы откроем книгу в другой день, она выделит красным цветом ячейки для этого конкретного дня.
Теперь вы можете скопировать ячейку C1, выделить все данные в столбце C и выполнить Edit> Paste Special> Formats> OK, чтобы применить этот формат к каждой ячейке в столбце C.
Следующий макрос автоматизирует назначение условного формата:
Sub Macro2() Range("C1").Select Selection.FormatConditions.Delete Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=INT(C1)=TODAY()" Selection.FormatConditions(1).Interior.ColorIndex = 3 Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=AND(INT(C1)>TODAY(),(INT(C1)-TODAY())<16)" Selection.FormatConditions(2).Interior.ColorIndex = 6 Selection.Copy FinalRow = Range("C15000").End(xlUp).Row Range("C2:C" & FinalRow).Select Selection.PasteSpecial Paste:=xlPasteFormats End Sub
Для пользователей Excel 95 у вас нет условного форматирования, но вы можете использовать такой макрос:
Sub Macro95() ThisDate = Date FinalRow = Range("C15000").End(xlUp).Row For x = 1 To FinalRow ThisCell = Int(Range("C" & x).Value) If ThisCell = ThisDate Then Range("C" & x).Interior.ColorIndex = 3 Else DaysFromNow = ThisCell - ThisDate If DaysFromNow> 0 And DaysFromNow < 16 Then Range("C" & x).Interior.ColorIndex = 6 End If End If Next x End Sub
Функция формул функции условного форматирования очень мощная и позволяет выделять ячейки, соответствующие различным критериям.