Главная » Статьи » Excel » Условное форматирование

Разбор создания универсального табеля рабочего времени

Все, кто работал в средних и крупных компаниях, наверняка сталкивались с таким документом, как табель учёта рабочего времени. Его заполняют руководители групп или отделов и сдают в отдел кадров. Хорошо, если последний создаёт его на год и распространяет в виде шаблона, но часто происходит доработка своего старого шаблона каждым ответственным.

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

Готовый шаблон можно скачать тут.

Чем удобен данный шаблон:

  • Чтобы поучить колонки с датами нужного месяца, надо просто указать нужный год и нужный месяц. Остальное шаблон сделает сам.
  • Выходные дни автоматически подсвечиваются серым
  • Праздничные дни подсвечиваются красным, если вы их указали на листе Праздники (заранее предугадать, каие праздники и куда наше правительство перенесёт затруднительно)
  • Рамки во всей таблице рисуются автоматически при помощи условного форматирования - достаточно ввести новую фамилию сотрудника, чтобы это увидеть
  • Больничные, отпуска, прогулы и рабочие дни выделяются цветом (при вводе соответствующего кода в ячейки)

Данный шаблон демонстрационный, поэтому тут нет подъитогов, которые обычно есть в табеле, подписей и т.д. Моя задача - демонстрация возможностей Excel.

Попробуйте поизменять ячейку Месяц в шаблоне для 2014 года, чтобы убедиться в корректном динамическом формировании всех колонок.

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

Теперь настало время разобраться, как же работает всё это "волшебство".

1. Для начала сделайте видимыми скрытые строки 3, 4 и 6.

2. Обратите внимание, что в Менеджере имён четырём ячейкам и одному диапазону даны символьные имена.

  • Ячейка B1 поименована как TYear - тут мы выбирает нужный нам год
  • Ячейка B2 поименована как TMonth - тут мы выбираем нужный месяц, вводя значение от 1 до 12
  • Ячейка B3 поименована как TDays - тут мы вычисляем количество дней в выбранном месяце
  • Ячейка B4 поименована как TOffset - здесь мы храним количество столбцов между первым столбцом с датой табеля и столбцом A
  • На листе Праздники объявлен динамический диапазон Holidays

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

3. В ячейке B3 мы вычисляем длительность месяца, выбранного в полях Год и Месяц.

  • DATE(Tyear;Tmonth;1) - первый день месяца
  • EOMONTH(DATE(Tyear;Tmonth;1);0) - последний день месяца. Функция EOMONTH возвращает дату последнего дня месяца, переданного в первом аргументе, отстоящего на количество месяцев, переданных в качестве второго аргумента (в нашем случае это ноль)
  • При вводе этой формулы в ячейку Excel автоматически меняет её формат на Дату, показывая нечто типа "31.01.1900". Необходимо руками указать что тип ячейки General, а не Date.

4. В строке с заголовком Индикатор с D6 до AH6 мы вычисляем нужна ли данная колонка для выбранного месяца (значение 1) или не нужна (значение 0).

Например, для февраля 2014 года столбцы AF:AH, которые предназначены для 29, 30 и 31-го числа месяца, очевидным образом не нужны, поэтому там вы увидите нули в отличие, например, от января 2014-го. Данные индикаторы используются для сигнализации правилам условного форматирования Excel, что данные столбцы форматировать надо (если 1) или не надо (если 0).

Индикатор получаем при помощи функции IF, в которой вычисляется логическое условие в первом аргументе. Если номер текущего столбца, поправленный на величену TOffset, меньше или равен числу дней в выбранном месяце, то формула выдаёт 1, если нет - 0. Просто и наглядно из-за использования именованных ячеек.

5. Далее следует сформировать даты в строке 7.

  • Ячейка D7 имеет простейшую формулу =DATE(Tyear;Tmonth;1)
  • Ячейки D8 и далее имееют формулы
  • Данная формула проверяет индикатор в строке 6 и если оно равно 1 (1 = TRUE для Excel), то вычисляется дата на основе года, месяца, а день берётся из предыдущей ячейки +1
  • В противном случае возвращается пустая строка

6. А вот теперь настаёт главное веселье. Сейчас мы начинаем обсуждать то, ради чего писалась, по сути, вся эта статья.

  • Войдите в диалоговое окно условного форматирования Home -> Conditional Formatting -> Manage Rules...
  • Обязательно выберите Show formatting rules for = This Worksheet, чтобы увидеть все правила форматирования
  • На данном экране перечислены все правила форматирования, которые существуют на этом рабочем листе
  • В первой колонке (Rule) мы видим тип форматирования: в нашем случае это либо Formula: =, либо Cell Value =. То есть используются правила на основе либо формулы (сложный вариант, который вам, возможно, ещё не знаком), либо значения ячейки (самый простейший и понятный всем вариант)
  • Во второй колонке (Format) вы видите образец форматирования, который будет применяться
  • В третьей колонке (Applies to) указан диапазон ячеек, которые будут подвергаться форматированию с использованием формата из второй колонки
  • В четвёртой колонке (Stop If True) выставляется флаг, который отменяет все нижележащие форматирования для ячейки из данного диапазона, если данное правило форматирования сработало

Что же такое форматирование на основе формулы? Это когда Excel применяет настроенное форматирование, если формула условного форматирования (не ячейки, а именно формула внутри правила условного форматирования) принимает ИСТИННОЕ значение.

Давайте посмотрим на правило №1, где введена формула =D$6=1" для диапазона ячеек =$D$7:$AH$7". Данное правило должно применяться для оформления строки дат месяца голубым фоном и белым шрифтом. То есть, если "индикатор" дня (в строке 6) равен 1, то применяется бело-голубое форматирование, а если не равно, то не применяется. Но постойте! Почему в формуле мы видим только ячейку D$6 ? Ведь это подойдёт только для форматирования ячейки D7, а, к примеру, для правильного форматирования ячейки Z7, необходимо, чтобы формула ссылалась на ячейку Z6! Оказывается, что эту работу Excel проводит за нас и "протягивает" формулу условного форматирования вправо! То есть, форматируя ячейку D7 он смотрит равно ли единице значение в ячейке D6, форматируя ячейку E7 - смотрит на E6 и так далее.

Для чего перед 6 стоит знак $ в формуле правила? В данном правиле это не выстрелило, но вообще говоря, это команда Excel не менять адрес строки (шестой), если бы мы протягивали формулу условного форматирования не только вправо (смотрите адрес нашего диапазона - =$D$7:$AH$7), но и вниз (например целевой диапазон мог бы быть =$D$7:$AH$8"). Надеюсь, вы понимаете разницу между абсолютными и относительными адресами ячеек Excel.

Правило №2 рисует рамку в диапазоне ФИО (колонки A:C), если введена фамилия. Прелесть шаблона в том, что форматирование появляется только для заполненных фамилией сотрудника строк.

Правило №3 очень важно. Оно отменяет любое форматирование, если фамилия пуста. Причём данное правило снабжено галкой (Stop If True), что отменяет обработку правил, лежащих ниже этого.

Правило №4 рисует рамки в диапазоне D8:AH20.

Правила №№5-8 меняют фон в зависимости от кода, введенного в ячейку дня. Тут, полагаю, дополнительные комментарии излишни.

Правило №9 отмечает серым выходные, основываясь на формуле =AND(WEEKDAY(D$7;2)>5;D$6=1)". То есть должны выполняться два условия (функция AND): первое - дата в строке 7 это выходной (функция WEEKDAY возвращает номер дня недели, а условие требует чтобы день был больше 5, то есть 6 - суббота или 7 - воскресенье), второе - что данная дата "включена" индикатором.

И правило №10 срабатывает когда текущий день находится на листе Праздники, в диапазоне ячеек Holiday. Объяснять нюансы этой формулы в этой статье нецелесообразно, но мы это обязательно сделаем в других.

Как вы могли заметить, форматирование производится до 20-й строки, но никто не мешает вам в ваших шаблонах увеличить эту константу. Жаль только, что Excel не поддерживает динамические диапазоны в поле Applies to правил форматирования. Туда можно подставить именованный диапазон, но он заменится на статическую адресацию.

Ну вот и всё. Надеюсь, вам понравилось и вы оценили всю мощь условного форматирования Excel.

P.S. Да, в шаблоне ещё есть небольшой макрос, который очищает колонки Dn:AHn, когда вы удаляете фамилию в строке An (где n - номер строки). Это сервисная функция для полноты картины.

Читайте также:

Категория: Условное форматирование | Добавил: dsb75 (11.01.2014) | Автор: Батьянов Денис E W
Просмотров: 21936 | Комментарии: 3 | Теги: условное форматирование, табель рабочего времени, conditional formatting, Excel | Рейтинг: 5.0/3
Всего комментариев: 3
0
1 miki   (01.04.2015 15:18)
Спасибо за статью! Очень интересно. Интересует вариант с двухстрочным табелем!

0
2 dsb75   (01.04.2015 16:09)
Это какая-то утверждённая форма или что?

0
3 miki   (01.04.2015 16:58)
да, форма т-13

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Яндекс.Метрика