Календарь рабочих дней excel

Производственный календарь, т.е. список дат, где соответствующим образом помечены все официальные рабочие и выходные дни — совершенно необходимая штука для любого пользователя Microsoft Excel. На практике без него не обойтись:

  • в бухгалтерских расчетах (зарплата, стаж, отпуска…)
  • в логистике — для корректного определения сроков доставки с учётом выходных и праздников (помните классическое «давай уже после праздников?»)
  • в управлении проектами — для правильной оценки сроков с учётом, опять же, рабочих-нерабочих дней
  • при любом использовании функций типа РАБДЕНЬ (WORKDAY) или ЧИСТРАБДНИ (NETWORKDAYS), т.к. они требуют в качестве аргумента список праздников
  • при использовании функций Time Intelligence (типа TOTALYTD, TOTALMTD, SAMEPERIODLASTYEAR и т.д.) в Power Pivot и Power BI
  • … и т.д. и т.п. — примеров масса.

Тем, кто работает в корпоративных ERP-системах типа 1С или SAP — проще, в них производственный календарь встроен. Но что делать пользователям Excel?

Можно, конечно, вести такой календарь вручную. Но тогда придется как минимум раз в год (а то и чаще, как в «весёлом» 2020 году) его актуализировать, аккуратно внося туда все выходные, переносы и нерабочие дни, придуманные нашим правительством. А потом повторять эту процедуру каждый следующий год. Скукота.

А как насчёт чуть напрячься и сделать «вечный» производственный календарь в Excel? Такой, чтобы сам обновлялся, брал данные из интернета и формировал всегда актуальный список нерабочих дней для последующего использования в любых расчетах? Заманчиво?

Сделать такое, на самом деле, совсем не сложно.

Источник данных

Главный вопрос — а где брать данные? В поисках подходящего источника я перебрал несколько вариантов:

  • Оригинальные указы публикуются на сайте правительства в формате PDF (вот, один из них, например) и отпадают сразу — полезную информацию из них не вытащить.
  • Заманчивым вариантом, на первый взгляд, казался «Портал открытых данных РФ», где есть соответствующий набор данных, но, при ближайшем изучении всё оказалось печально. Для импорта в Excel сайт жутко неудобен, техподдержка не отвечает (самоизолировались?), да и сами данные там давно устарели — производственный календарь на 2020 год обновлялся последний раз в ноябре 2019 (позорище!) и, само-собой, не содержит наших «коронавирусных» и «голосовательных» выходных 2020 года, например.

Разочаровавшись в официальных источниках, я стал рыть неофициальные. Их в интернете множество, но большинство из них, опять же, совершенно неприспособлены для импорта в Excel и выдают производственный календарь в виде красивых картинок. Но нам-то с вами не на стенку его вешать, правильно?

И вот в процессе поисков случайно обнаружилось прекрасное — сайт http://xmlcalendar.ru/

Сайт xmlcalendar.ru

Без лишних «рюшечек», простой, легкий и быстрый сайт, заточенный под одну задачу — отдавать всем желающим производственный календарь за нужный год в XML-формате. Отлично!

Если, вдруг, вы не в курсе, то XML — это текстовый формат с разметкой содержимого специальными <тегами>. Легкий, удобный и читаемый большинством современных программ, включая Excel.

Я, на всякий случай, связался с авторами сайта и они подтвердили, что сайт существует уже 7 лет, данные на нем постоянно актуализируются (у них для этого даже ветка на github есть) и закрывать его они не собираются. И совершенно не против, чтобы мы с вами с него грузили данные для любых наших проектов и расчётов в Excel. Бесплатно. Как же приятно, что есть еще такие люди! Респектище!

Осталось загрузить эти данные в Excel с помощью надстройки Power Query (для версий Excel 2010-2013 её можно бесплатно скачать с сайта Microsoft, а в версиях Excel 2016 и новее — она уже встроена по умолчанию).

Логика действий будет такая:

  1. Делаем запрос для загрузки данных с сайта за один любой год
  2. Превращаем наш запрос в функцию
  3. Применяем эту функцию к списку всех имеющихся лет, начиная с 2013 и до текущего года — и получаем «вечный» производственный календарь с автоматическим обновлением. Вуаля!

Шаг 1. Импортируем календарь за один год

Сначала загрузим производственный календарь за один любой год, например, за 2020. Для этого в Excel идём на вкладку Данные (или Power Query, если вы установили её как отдельную надстройку) и выбираем Из интернета (From Web). В открывшееся окно вставляем ссылку на соответствующий год, скопированную с сайта:

Грузим данные с сайта через Power Query

После нажатия на ОК появляется окно предварительного просмотра, в котором нужно нажать кнопку Преобразовать данные (Transform data) или Изменить данные (Edit data) и мы попадем в окно редактора запросов Power Query, где и продолжим работу с данными:

Окно Power Query

Сразу же можно смело удалить в правой панели Параметры запроса (Query settings) шаг Измененный тип (Changed Type) — он нам не нужен.

Таблица в столбце holidays содержит коды и описания нерабочих дней — увидеть её содержимое можно, дважды «провалившись» в неё щелчком мыши по зелёному слову Table:

Проваливаемся в таблицу праздников

Для возврата назад придется удалить в правой панели все появившиеся шаги обратно до Источника (Source).

Вторая таблица, куда можно зайти аналогичным образом, содержит как раз то, что нам нужно — даты всех нерабочих дней:

Таблица выходных

Останется эту табличку обработать, а именно:

1. Отфильтровать только даты праздников (т.е. единички) по второму столбцу Attribute:t

Удаляем лишние столбцы

2. Удалить все столбцы, кроме первого — щелчком правой кнопкой мыши по заголовку первого столбца и выбором команды Удалить другие столбцы (Remove Other Columns):

Удаляем лишние столбцы

3. Разделить первый столбец по точке отдельно на месяц и день с помощью команды Разделить столбец — По разделителю на вкладке Преобразование (Transform — Split column — By delimiter):

Делим по точке на месяц и день

4. И, наконец, создать вычисляемый столбец с нормальными датами. Для этого на вкладке Добавление столбца жмём на кнопку Настраиваемый столбец (Add Column — Custom Column) и вводим в появившееся окно следующую формулу:

Создаем столбец с датами

=#date(2020, [#»Attribute:d.1″], [#»Attribute:d.2″])

Здесь у оператора #date три аргумента: год, месяц и день, соответственно. После нажатия на ОК получаем требуемый столбец с нормальными датами выходных, а остальные столбцы удаляем как в п.2

Готовый список нерабочих дней

Шаг 2. Превращаем запрос в функцию

Следующая наша задача — преобразовать созданный на 2020 год запрос в универсальную функцию для любого года (номер года будет её аргументом). Для этого делаем следующее:

1. Разворачиваем (если ещё не развернута) панель Запросы (Queries) слева в окне Power Query:

Панель запросов

2. После преобразования запроса в функцию возможность видеть шаги, из которых состоит запрос и легко их редактировать, к сожалению, пропадает. Поэтому имеет смысл сделать копию нашего запроса и резвиться уже с ней, а оригинал оставить про запас. Для этого щелкаем правой кнопкой мыши в левой панели по нашему запросу calendar и выбираем команду Дублировать (Duplicate).

Щелкнув еще раз правой по получившейся копии calendar(2) выберем команду Переименовать (Rename) и введём новое имя — пусть будет, например, fxYear:

Копируем исходный запрос

3. Открываем исходный код запроса на внутреннем языке Power Query (он лаконично назвается «М») с помощью команды Расширенный редактор на вкладке Просмотр (View — Advanced Editor) и вносим туда небольшие правки для превращения нашего запроса в функцию на любой год.

Было:

Было

Стало:

Стало

Если интересны подробности, то здесь:

  • (year as number)=>  — объявляем, что в нашей функции будет один числовой аргумент — переменная year
  • Подклеиваем переменную year в веб-ссылку на шаге Источник. Поскольку Power Query не позволяет склеивать числа и текст, то на лету преобразовываем номер года в текст с помощью функции Number.ToText
  • Подставляем переменную year вместо 2020 года на предпоследнем шаге #»Добавлен пользовательский объект«, где мы формировали дату из фрагментов.

После нажатия на Готово наш запрос превращается в функцию:

Запрос превратился в функцию

Шаг 3. Импортируем календари за все года

Осталась самая малость — сделать последний главный запрос, который будет закачивать данные за все имеющиеся года и складывать все полученные даты праздников в одну таблицу. Для этого:

1. Щёлкаем в левой панели запросов в серое пустое место правой кнопкой мыши и выбираем последовательно Новый запрос — Другие источники — Пустой запрос (New Query — From other sources — Blank query):

Создаем пустой запрос

2. Нам нужно сформировать список всех лет, для которых мы будем запрашивать календари, т.е. 2013, 2014 … 2020. Для этого в строке формул появившегося пустого запроса вводим команду:

Формируем список лет

Конструкция:

={ЧислоА..ЧислоБ}

… в Power Query формирует список целых чисел от А до Б. Например, выражение

={1..5}

…выдало бы список 1,2,3,4,5.

Ну, а чтобы не привязываться жёстко к 2020 году, мы используем функцию DateTime.LocalNow() — аналог экселевской функции СЕГОДНЯ (TODAY) в Power Query — и извлекаем из неё, в свою очередь, текущий год функцией Date.Year.

3. Полученный набор лет хоть и выглядит вполне адекватно, но для Power Query представляет собой не таблицу, а особый объект — список (List). Но преобразовать его в таблицу — не проблема: достаточно нажать кнопку В таблицу (To Table) в левом верхнем углу:

Преобразуем список в таблицу

4. Финишная прямая! Применяем созданную нами ранее функцию fxYear к полученному списку лет. Для этого на вкладке Добавление столбца жмём кнопку Вызвать настраиваемую функцию (Add Column — Invoke Custom Function) и задаём её единственный аргумент — колонку Column1 с годами:

Вызываем функцию fxYear

После нажатия на ОК наша функция fxYear по очереди отработает импорт для каждого года и мы получим столбец, где в каждой ячейке будет содержаться таблица с датами нерабочих дней (содержимое таблицы хорошо видно, если щёлкнуть мышью в фон ячейки рядом со словом Table):

Вложенные таблицы с данными по каждому году

Останется развернуть содержимое вложенных таблиц, щёлкнув по значку с двойными стрелками в шапке столбца Даты (галочку Использовать исходное имя столбца как префикс при этом можно снять):

Разворачиваем вложенные таблицы

… и после нажатия на ОК мы получим то, что хотели — список всех праздников с 2013 и до текущего года:

Все загруженные даты праздников за все годы

Первый, ненужный уже столбец, можно удалить, а для второго задать тип данных Дата (Date) в выпадающем списке в шапке столбца:

Задаем тип данных даты

Сам запрос можно переименовать как-нибудь более осмысленно, чем Запрос1 и выгрузить затем результаты на лист в виде динамической «умной» таблицы с помощью команды Закрыть и загрузить на вкладке Главная (Home — Close & Load):

Готовый производственный календарь в Excel

Обновлять созданный календарь в будущем можно щелчком правой кнопки мыши по таблице или запросу в правой панели через команду Обновить. Или же использовать кнопку Обновить все на вкладке Данные (Date — Refresh All) или сочетание клавиш Ctrl+Alt+F5.

Вот и всё.

Теперь вам больше никогда не нужно тратить время и мыслетопливо на поиски и актуализацию списка праздничных дней — теперь у вас есть «вечный» производственный календарь. Во всяком случае, до тех пор, пока авторы сайта http://xmlcalendar.ru/ поддерживают своё детище, что, я надеюсь, будет ещё очень и очень долго (спасибо им еще раз!).

Ссылки по теме

  • Импорт курса биткойна в Excel из интернета через Power Query
  • Поиск ближайшего рабочего дня функцией РАБДЕНЬ (WORKDAY)
  • Поиск пересечения интервалов дат

Очень часто во время создания в Excel отчетов необходимо воспользоваться графиком рабочих дней без выходных и праздничных. Таблица такого типа буде полезна для вычисления товарооборота за 1 рабочий день, денежный оборот по будням и т.д.

Как составить график рабочих дней в Excel?

Один из самых простых способов составить график рабочих дней без выходных и праздников, основан на использовании функции РАБДЕНЬ.МЕЖД.

Построение графика начнем от указания даты последнего рабочего дня прошлого года. Рядом составим список только праздничных (без выходных), которые являются нерабочими днями на вашей фирме для текущего года. Все значения должны иметь формат ячеек «Дата». Пример начала создания графика рабочих дней показан ниже на рисунке:

Шаблон графика.

В ячейке A3 введите первую формулу, которая ссылается на ячейку B1 с датой последнего рабочего дня предыдущего года:

=РАБДЕНЬ.МЕЖД(B1;1;1;$B$3:$B$16)

РАБДЕНЬ.МЕЖД.

А в ячейку A4 введите вторую формулу для последующего копирования в остальные ячейки:

=РАБДЕНЬ.МЕЖД(A3;1;1;$B$3:$B$16)

Теперь скопируйте эту формулу в остальные ячейки данного столбца ровно столько, сколько требуется получить рабочих дней для графика текущего года:

график рабочих дней.

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

Функция РАБДЕНЬ.МЕЖД возвращает дату рабочего дня вычисленную на основе количества дней, на которое должна быть увеличенная задана дата. У функции имеется 2 обязательных аргумента и 2 опциональных:

=РАБДЕНЬ.МЕЖД(нач_дата;число_дней;выходные;праздники)

  1. Нач_дата: с какой даты следует начать выполнять вычисление.
  2. Число_дней: количество в днях, которое будет вычисляться от начальной даты.
  3. Выходные: по умолчанию если данный опциональный аргумент не заполнен, то функция считает за выходные дни недели субботу и воскресенье. Однако данный аргумент позволяет определить какие именно дни недели считать за выходные. Во время ввода функции вручную в строку формул или в ячейку Excel высверливается интерактивная подсказка с помощью, которой можно выбрать одну из 15-ти доступных вариаций для выходных. Или просто указать в третьем аргументе код вариации, то есть число от 1-го и до 15-ти. Изменение графика рабочего дня в Excel:
  4. Изменение графика.

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



Как устроен график рабочих дней в Excel?

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

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

Содержание

  • Создание различных календарей
    • Способ 1: создание календаря на год
    • Способ 2: создание календаря с использованием формулы
    • Способ 3: использование шаблона
  • Вопросы и ответы

Календарь в Microsoft Excel

При создании таблиц с определенным типом данных иногда нужно применять календарь. Кроме того, некоторые пользователи просто хотят его создать, распечатать и использовать в бытовых целях. Программа Microsoft Office позволяет несколькими способами вставить календарь в таблицу или на лист. Давайте выясним, как это можно сделать.

Если инструкция по созданию календаря в Microsoft Excel вам покажется сложной, в качестве альтернативы рекомендуем рассмотреть веб-платформу Canva, доступную онлайн из любого браузера. Это сервис с огромной библиотекой редактируемых шаблонов различной направленности и стилистики, в числе которых есть и календари. Любой из них можно изменить на свое усмотрение либо создать таковой с нуля и затем сохранить на компьютер в предпочтительном формате или распечатать.

Создание различных календарей

Все календари, созданные в Excel, можно разделить на две большие группы: охватывающие определенный отрезок времени (например, год) и вечные, которые будут сами обновляться на актуальную дату. Соответственно и подходы к их созданию несколько отличаются. Кроме того, можно использовать уже готовый шаблон.

Способ 1: создание календаря на год

Прежде всего, рассмотрим, как создать календарь за определенный год.

  1. Разрабатываем план, как он будет выглядеть, где будет размещаться, какую ориентацию иметь (альбомную или книжную), определяем, где будут написаны дни недели (сбоку или сверху) и решаем другие организационные вопросы.
  2. Для того, чтобы сделать календарь на один месяц выделяем область, состоящую из 6 ячеек в высоту и 7 ячеек в ширину, если вы решили писать дни недели сверху. Если вы будете их писать слева, то, соответственно, наоборот. Находясь во вкладке «Главная», кликаем на ленте по кнопке «Границы», расположенной в блоке инструментов «Шрифт». В появившемся списке выбираем пункт «Все границы».
  3. Ограничивание ячеек в Microsoft Excel

  4. Выравниваем ширину и высоту ячеек, чтобы они приняли квадратную форму. Для того, чтобы установить высоту строки кликаем на клавиатуре сочетание клавиш Ctrl+A. Таким образом, выделяется весь лист. Затем вызываем контекстное меню кликом левой кнопки мыши. Выбираем пункт «Высота строки».
    Переход к установки высоты строки в Microsoft Excel

    Открывается окно, в котором нужно установить требуемую высоту строки. Ели вы впервые делаете подобную операцию и не знаете, какой размер установить, то ставьте 18. Потом жмите на кнопку «OK».

    Установка высоты строки в Microsoft Excel

    Теперь нужно установить ширину. Кликаем по панели, на которой указаны наименования столбцов буквами латинского алфавита. В появившемся меню выбираем пункт «Ширина столбцов».

    Переход к установки ширины столбца в Microsoft Excel

    В открывшемся окне установите нужный размер. Если не знаете, какой размер установить, можете поставить цифру 3. Жмите на кнопку «OK».

    Установка ширины столбца в Microsoft Excel

    После этого, ячейки на листе приобретут квадратную форму.

  5. Теперь над расчерченным шаблоном нам нужно зарезервировать место для названия месяца. Выделяем ячейки, находящиеся выше строки первого элемента для календаря. Во вкладке «Главная» в блоке инструментов «Выравнивание» жмем на кнопку «Объединить и поместить в центре».
  6. Объединение ячеек в Microsoft Excel

  7. Прописываем дни недели в первом ряду элемента календаря. Это можно сделать при помощи автозаполнения. Вы также можете на свое усмотрение отформатировать ячейки этой небольшой таблицы, чтобы потом не пришлось форматировать каждый месяц в отдельности. Например, можно столбец, предназначенный для воскресных дней залить красным цветом, а текст строки, в которой находятся наименования дней недели, сделать полужирным.
  8. Форматирование ячеек в Microsoft Excel

    Lumpics.ru

  9. Копируем элементы календаря ещё для двух месяцев. При этом не забываем, чтобы в область копирования также входила объединенная ячейка над элементами. Вставляем их в один ряд так, чтобы между элементами была дистанция в одну ячейку.
  10. Элементы календаря скопированы в Microsoft Excel

  11. Теперь выделяем все эти три элемента, и копируем их вниз ещё в три ряда. Таким образом, должно получиться в общей сложности 12 элементов для каждого месяца. Дистанцию между рядами делайте две ячейки (если используете книжную ориентацию) или одну (при использовании альбомной ориентации).
  12. Крпирование ячеек в Microsoft Excel

  13. Затем в объединенной ячейке пишем название месяца над шаблоном первого элемента календаря – «Январь». После этого, прописываем для каждого последующего элемента своё наименование месяца.
  14. Установка наименования месяцев в Microsoft Excel

  15. На заключительном этапе проставляем в ячейки даты. При этом, можно значительно сократить время, воспользовавшись функцией автозаполнения, изучению которой посвящен отдельный урок.

Выставление дат в Microsoft Excel

После этого, можно считать, что календарь готов, хотя вы можете дополнительно отформатировать его на своё усмотрение.

Урок: Как сделать автозаполнение в Excel

Способ 2: создание календаря с использованием формулы

Но, все-таки у предыдущего способа создания есть один весомый недостаток: его каждый год придется делать заново. В то же время, существует способ вставить календарь в Excel с помощью формулы. Он будет каждый год сам обновляться. Посмотрим, как это можно сделать.

  1. В левую верхнюю ячейку листа вставляем функцию:
    ="Календарь на " & ГОД(СЕГОДНЯ()) & " год"
    Таким образом, мы создаем заголовок календаря с текущим годом.
  2. Вставка формулы в Microsoft Excel

  3. Чертим шаблоны для элементов календаря помесячно, так же как мы это делали в предыдущем способе с попутным изменением величины ячеек. Можно сразу провести форматирование этих элементов: заливка, шрифт и т.д.
  4. Создание макета календаря в Microsoft Excel

  5. В место, где должно отображаться названия месяца «Январь», вставляем следующую формулу:
    =ДАТА(ГОД(СЕГОДНЯ());1;1)
    Вставка формулы для января

    Но, как видим, в том месте, где должно отобразиться просто название месяца установилась дата. Для того, чтобы привести формат ячейки к нужному виду, кликаем по ней правой кнопкой мыши. В контекстном меню выбираем пункт «Формат ячеек…».

    Переход в формат ячеек в Microsoft Excel

    В открывшемся окне формата ячеек переходим во вкладку «Число» (если окно открылось в другой вкладке). В блоке «Числовые форматы» выделяем пункт «Дата». В блоке «Тип» выбираем значение «Март». Не беспокойтесь, это не значит, что в ячейке будет слово «Март», так как это всего лишь пример. Жмем на кнопку «OK».

  6. Окно формата ячеек в Microsoft Excel

  7. Как видим, наименование в шапке элемента календаря изменилось на «Январь». В шапку следующего элемента вставляем другую формулу:
    =ДАТАМЕС(B4;1)
    В нашем случае, B4 – это адрес ячейки с наименованием «Январь». Но в каждом конкретном случае координаты могут быть другими. Для следующего элемента уже ссылаемся не на «Январь», а на «Февраль», и т.д. Форматируем ячейки так же, как это было в предыдущем случае. Теперь мы имеем наименования месяцев во всех элементах календаря.
  8. Добавление наименований месяцев в Microsoft Excel

  9. Нам следует заполнить поле для дат. Выделяем в элементе календаря за январь все ячейки, предназначенные для внесения дат. В Строку формул вбиваем следующее выражение:
    =ДАТА(ГОД(D4);МЕСЯЦ(D4);1-1)-(ДЕНЬНЕД(ДАТА(ГОД(D4);МЕСЯЦ(D4);1-1))-1)+{0:1:2:3:4:5:6}*7+{1;2;3;4;5;6;7}
    Жмем сочетание клавиш на клавиатуре Ctrl+Shift+Enter.
  10. Заполнение пространства дат в Microsoft Excel

  11. Но, как видим, поля заполнились непонятными числами. Для того, чтобы они приняли нужный нам вид. Форматируем их под дату, как это уже делали ранее. Но теперь в блоке «Числовые форматы» выбираем значение «Все форматы». В блоке «Тип» формат придется ввести вручную. Там ставим просто букву «Д». Жмем на кнопку «OK».
  12. Форматирование под дату в Microsoft Excel

  13. Вбиваем аналогичные формулы в элементы календаря за другие месяцы. Только теперь вместо адреса ячейки D4 в формуле нужно будет проставить координаты с наименованием ячейки соответствующего месяца. Затем, выполняем форматирование тем же способом, о котором шла речь выше.
  14. Выставление дат во всех месяцах в Microsoft Excel

  15. Как видим, расположение дат в календаре все ещё не корректно. В одном месяце должно быть от 28 до 31 дня (в зависимости от месяца). У нас же в каждом элементе присутствуют также числа из предыдущего и последующего месяца. Их нужно убрать. Применим для этих целей условное форматирование.

    Производим в блоке календаря за январь выделение ячеек, в которых содержатся числа. Кликаем по значку «Условное форматирование», размещенному на ленте во вкладке «Главная» в блоке инструментов «Стили». В появившемся перечне выбираем значение «Создать правило».

    Переход к созданию правила условного форматирования в Microsoft Excel

    Открывается окно создания правила условного форматирования. Выбираем тип «Использовать формулу для определения форматируемых ячеек». В соответствующее поле вставляем формулу:
    =И(МЕСЯЦ(D6)1+3*(ЧАСТНОЕ(СТРОКА(D6)-5;9))+ЧАСТНОЕ(СТОЛБЕЦ(D6);9))
    D6 – это первая ячейка выделяемого массива, который содержит даты. В каждом конкретном случае её адрес может отличаться. Затем кликаем по кнопке «Формат».

    Создание правила в Microsoft Excel

    В открывшемся окне переходим во вкладку «Шрифт». В блоке «Цвет» выбираем белый или цвет фона, если у вас установлен цветной фон календаря. Жмем на кнопку «OK».

    Установка цвета шрифта в Microsoft Excel

    Вернувшись в окно создания правила, жмем на кнопку «OK».

  16. Создание правила в программе Microsoft Excel

  17. Используя аналогичный способ, проводим условное форматирование относительно других элементов календаря. Только вместо ячейки D6 в формуле нужно будет указывать адрес первой ячейки диапазона в соответствующем элементе.
  18. Скрытие лишних дат в Microsoft Excel

  19. Как видим, числа, которые не входят в соответствующий месяц, слились с фоном. Но, кроме того, с ним слились и выходные дни. Это было сделано специально, так как ячейки, где содержаться числа выходных дней мы зальём красным цветом. Выделяем в январском блоке области, числа в которых выпадают на субботу и воскресение. При этом, исключаем те диапазоны, данные в которых были специально скрыты путем форматирования, так как они относятся к другому месяцу. На ленте во вкладке «Главная» в блоке инструментов «Шрифт» кликаем по значку «Цвет заливки» и выбираем красный цвет.
    Заливка ячееек в Microsoft Excel

    Точно такую же операцию проделываем и с другими элементами календаря.

  20. Заливка цветом всех ячеек в Microsoft Excel

  21. Произведем выделение текущей даты в календаре. Для этого, нам нужно будет опять произвести условное форматирование всех элементов таблицы. На этот раз выбираем тип правила «Форматировать только ячейки, которые содержат». В качестве условия устанавливаем, чтобы значение ячейки было равно текущему дню. Для этого вбиваем в соответствующее поля формулу (показано на иллюстрации ниже).
    =СЕГОДНЯ()
    В формате заливки выбираем любой цвет, отличающийся от общего фона, например зеленый. Жмем на кнопку «OK».
    Установка формата ячеек в Microsoft Excel

    После этого, ячейка, соответствующая текущему числу, будет иметь зеленый цвет.

  22. Установим наименование «Календарь на 2017 год» посередине страницы. Для этого выделяем всю строку, где содержится это выражение. Жмем на кнопку «Объединить и поместить в центре» на ленте. Это название для общей презентабельности можно дополнительно отформатировать различными способами.

Объединение ячеек в программе Microsoft Excel

В целом работа над созданием «вечного» календаря завершена, хотя вы можете ещё долго проводить над ним различные косметические работы, редактируя внешний вид на свой вкус. Кроме того, отдельно можно будет выделить, например, праздничные дни.

Вечный календарь готов в Microsoft Excel

Урок: Условное форматирование в Excel

Способ 3: использование шаблона

Те пользователи, которые ещё в недостаточной мере владеют Экселем или просто не хотят тратить время на создание уникального календаря, могут воспользоваться готовым шаблоном, закачанным из интернета. Таких шаблонов в сети довольно много, причем велико не только количество, но и разнообразие. Найти их можно, просто вбив соответствующий запрос в любую поисковую систему. Например, можно задать следующий запрос: «календарь шаблон Excel».

Примечание: В последних версиях пакета Microsoft Office огромный выбор шаблонов (в том числе и календарей) интегрирован в состав программных продуктов. Все они отображаются непосредственно при открытии программы (не конкретного документа) и, для большего удобства пользователя, разделены на тематические категории. Именно здесь можно выбрать подходящий шаблон, а если такового не найдется, его всегда можно скачать с официального сайта Office.com.

По сути, такой шаблон — уже готовый календарь, в котором вам только останется занести праздничные даты, дни рождения или другие важные события. Например, таким календарем является шаблон, который представлен на изображении ниже. Он представляет собой полностью готовую к использованию таблицу.

Шаблон календаря в Microsoft Excel

Вы можете в нем с помощью кнопки заливки во вкладке «Главная» закрасить различными цветами ячейки, в которых содержатся даты, в зависимости от их важности. Собственно, на этом вся работа с подобным календарем может считаться оконченной и им можно начинать пользоваться.

Выделение дат в Microsoft Excel

Мы разобрались, что календарь в Экселе можно сделать двумя основными способами. Первый из них предполагает выполнение практически всех действий вручную. Кроме того, календарь, сделанный этим способом, придется каждый год обновлять. Второй способ основан на применении формул. Он позволяет создать календарь, который будет обновляться сам. Но, для применения данного способа на практике нужно иметь больший багаж знаний, чем при использовании первого варианта. Особенно важны будут знания в сфере применения такого инструмента, как условное форматирование. Если же ваши знания в Excel минимальны, то можно воспользоваться готовым шаблоном, скачанным из интернета.

В предыдущей статье мы уже разобрались, как загрузить производственный календарь в Power BI.

Теперь разберём, как загрузить в Excel производственный календарь для последующего использования. В статье показан один из вариантов, далеко не единственный. 
В качестве источника данных воспользуемся набором на Портале открытых данных РФ (

https://data.gov.ru/opendata/7708660670-proizvcalendar). 
Раскроем паспорт набора:
Набор представляет собой производственный календарь c 1999 до 2025 года. Звездочкой (*) отмечены предпраздничные (сокращенные) дни. Плюсом (+) отмечены перенесенные выходные дни. 
Для загрузки в Excel скопируем ссылку на набор (https://data.gov.ru/opendata/7708660670-proizvcalendar/data-20191112T1252-structure-20191112T1247.csv): 
Запустим Excel. Воспользуемся коннектором для получения данных с Web-страницы (вкладка “Данные” — “Создать запрос” — “Из других запросов” — “Из Интернета”):
В открывшемся диалоге вставим скопированную ранее ссылку на набор:

Предварительный просмотр данных показывает, что в таком виде данными пользоваться будет крайне сложно. Обработаем данные в Power Query.


Загруженный набор данных в каждой строке хранит описание для одного года — сначала на каждый месяц — через запятую список дней (выходных, сокращённых и дополнительных выходных), затем несколько статистических столбцов.
Удалим статистические столбцы. Они нам не пригодятся. Наша цель — таблица, где на каждую дату будет признак — рабочий, выходной или сокращённый рабочий (последний вариант — опциональный, такие дни можно тоже интерпретировать как рабочие, в зависимости от задачи):
Итого, у нас осталось 13 колонок — колонка с годом и с каждый месяцем. Развернём колонки с месяцами в плоский список. Для этого воспользуемся командой “Отменить свёртывание столбцов”:
Команда “Отменить свёртывание столбцов” создаёт пары для каждого сочетания названия столбца и ячейки в этом столбце и превращает их в столбцы:
Далее разделим столбец с днями на отдельные столбцы с помощью команды ”Разделить столбец” — “По разделителю”:
В качестве разделителя укажем запятую, разделим по каждому вхождения разделителя:
Получим 16 столбцов с числами — столько, сколько их значится в максимуме в некоторых месяцах. Там, где значений в ячейке было менее 16 — лишние столбцы остались со значением null. Произведём с числами ту же операцию, которую произвели с месяцами — развернём в плоский список с помощью команды “Отменить свёртывание столбцов”:
И получим таблицу, где каждая строка — характеристики одной даты. Столбец “Атрибут.1” появился как порядковый номер конкретного числа в ячейке, он не пригодится. Удалим его:
Теперь мы можем обработать звёздочки и плюсики, присвоив каждой строке (= каждой дате) некоторый признак. Чтобы далее использовать вычисление, определяющее вхождение символов * или + в строку — нам необходимо преобразовать столбец в текст:
Далее добавляем условный столбец, который будет присваивать признак каждому дню в зависимости от вхождения * и +:
Пропишем условие определения признака следующим образом: если в значении дня (столбец “Значение”) присутствует символ *, то считаем такой день сокращённым рабочим, иначе — выходным. Мы могли бы добавить ещё одно условие для вхождения символа +, но такие дни тоже являются выходными, хоть и добавленными. Можно выделить это тип дней отдельно, если этого требует задача. Мы выделять не будем:
Получаем вот такой столбец:
Теперь можно избавить из дополнительных символов у числа (* и +), чтобы перейти к дальнейшим шагам обработки. Для удаления символов воспользуемся командой “Замена значений”:
Заменим звёздочку на “ничего”. Оставим поле с итоговым значением пустым. Это будет равносильно тому, чтобы удалить выбранные подстроки (в данном случае — звёздочки):
Проделаем аналогичную операцию для удаления плюсиков. Теперь у нас есть три столбца — части даты. Соберём их в дату с помощью вычисляемого столбца:
Сбор даты из элементов можно произвести несколько способами. Рассмотрим один  из вариантов — соберём все элементы даты в текстовую строку и преобразуем в дату. Date.From — преобразовывает текст в дату. Text.Combine — объединяет несколько текстовых строк в одну. Text.From — преобразуем нетекстовое значение к текст. Точки между элементами даты добавим для разделения (можно воспользоваться другим символом, например, тире):

Date.From(

    Text.Combine(

        {

            [Значение], 

            «.», 

            [Атрибут], 

            «.», 

            Text.From([#»Год/Месяц»])

        }

    )

)


В результате получим столбец с датой — Date. Теперь можем удалить составные столбцы — они свою роль сыграли:
Осталось скорректировать типы данных. Поставить, что столбец Date — это данные типа Дата, Day type — Текст:
Результат:
Итоговый код обработки данных:

let

    Источник = Csv.Document(Web.Contents(«https://data.gov.ru/opendata/7708660670-proizvcalendar/data-20191112T1252-structure-20191112T1247.csv»),[Delimiter=»,», Columns=18, Encoding=65001, QuoteStyle=QuoteStyle.None]),

    #»Повышенные заголовки» = Table.PromoteHeaders(Источник, [PromoteAllScalars=true]),

    #»Измененный тип» = Table.TransformColumnTypes(#»Повышенные заголовки»,{{«Год/Месяц», Int64.Type}, {«Январь», type text}, {«Февраль», type text}, {«Март», type text}, {«Апрель», type text}, {«Май», type text}, {«Июнь», type text}, {«Июль», type text}, {«Август», type text}, {«Сентябрь», type text}, {«Октябрь», type text}, {«Ноябрь», type text}, {«Декабрь», type text}, {«Всего рабочих дней», Int64.Type}, {«Всего праздничных и выходных дней», Int64.Type}, {«Количество рабочих часов при 40-часовой рабочей неделе», Int64.Type}, {«Количество рабочих часов при 36-часовой рабочей неделе», type text}, {«Количество рабочих часов при 24-часовой рабочей неделе», type text}}),

    #»Удаленные столбцы» = Table.RemoveColumns(#»Измененный тип»,{«Всего рабочих дней», «Всего праздничных и выходных дней», «Количество рабочих часов при 40-часовой рабочей неделе», «Количество рабочих часов при 36-часовой рабочей неделе», «Количество рабочих часов при 24-часовой рабочей неделе»}),

    #»Несвернутые столбцы» = Table.UnpivotOtherColumns(#»Удаленные столбцы», {«Год/Месяц»}, «Атрибут», «Значение»),

    #»Разделить столбец по разделителю» = Table.SplitColumn(#»Несвернутые столбцы», «Значение», Splitter.SplitTextByDelimiter(«,», QuoteStyle.Csv), {«Значение.1», «Значение.2», «Значение.3», «Значение.4», «Значение.5», «Значение.6», «Значение.7», «Значение.8», «Значение.9», «Значение.10», «Значение.11», «Значение.12», «Значение.13», «Значение.14», «Значение.15», «Значение.16»}),

    #»Измененный тип1″ = Table.TransformColumnTypes(#»Разделить столбец по разделителю»,{{«Значение.1», type text}, {«Значение.2», type text}, {«Значение.3», type text}, {«Значение.4», type text}, {«Значение.5», type text}, {«Значение.6», type text}, {«Значение.7», type text}, {«Значение.8», type text}, {«Значение.9», type text}, {«Значение.10», type text}, {«Значение.11», type text}, {«Значение.12», type text}, {«Значение.13», Int64.Type}, {«Значение.14», Int64.Type}, {«Значение.15», Int64.Type}, {«Значение.16», Int64.Type}}),

    #»Несвернутые столбцы1″ = Table.UnpivotOtherColumns(#»Измененный тип1″, {«Год/Месяц», «Атрибут»}, «Атрибут.1», «Значение»),

    #»Удаленные столбцы1″ = Table.RemoveColumns(#»Несвернутые столбцы1″,{«Атрибут.1»}),

    #»Измененный тип2″ = Table.TransformColumnTypes(#»Удаленные столбцы1″,{{«Значение», type text}}),

    #»Условный столбец добавлен» = Table.AddColumn(#»Измененный тип2″, «Date type», each if Text.Contains([Значение], «*») then «Сокращённый рабочий» else «Выходной»),

    #»Замененное значение» = Table.ReplaceValue(#»Условный столбец добавлен»,»*»,»»,Replacer.ReplaceText,{«Значение»}),

    #»Замененное значение1″ = Table.ReplaceValue(#»Замененное значение»,»+»,»»,Replacer.ReplaceText,{«Значение»}),

    #»Добавлен пользовательский объект» = Table.AddColumn(#»Замененное значение1″, «Date», each Date.From(

    Text.Combine(

        {

            [Значение],

            «.», 

            [Атрибут], 

            «.», 

            Text.From([#»Год/Месяц»])

        }

    )

)),

    #»Удаленные столбцы2″ = Table.RemoveColumns(#»Добавлен пользовательский объект»,{«Год/Месяц», «Атрибут», «Значение»}),

    #»Измененный тип3″ = Table.TransformColumnTypes(#»Удаленные столбцы2″,{{«Date type», type text}})

in

    #»Измененный тип3″

*****

Получили почти то, что хотели, за исключением одного “но” — в итоговой таблице нет рабочих дней. Для решения некоторых задач полученного результата вполне достаточно. Кроме того, обработку дней мы можем далее заложить логикой (а-ля “Всё, что не в таблице — рабочие дни”). Но — закончим задачу для полноценного календаря, где тип присвоен каждой дате. Для этого сгенерим таблицу с полным список дат и объединим с полученной. Для генерации списка дат создадим пустой запрос:
И отредактируем код запроса вручную в Расширенном редакторе:
Зададим границы диапазона данных — дату начала и дату окончания:

date_start = #date(2015, 1, 1),
date_end = #date(2023, 1, 1),

Воспользуемся List.Dates для генерации списка дат. Ей необходимо три параметра: дата старта диапазона, количество элементов и шаг:

date_list = List.Dates(

                                date_start,                                 

                                Duration.Days(date_end — date_start) + 1,                               

                                #duration(1, 0, 0, 0)    

)

Получим вот такой код:

let

     date_start = #date(2015, 1, 1),

     date_end = #date(2023, 1, 1),

     date_list = List.Dates(

                                     date_start,

                                     Duration.Days(date_end — date_start) + 1,

                                     #duration(1, 0, 0, 0)

)

in

     date_list 


И в результате получим вот список дат в заданном диапазоне. Это список (не таблица) и, соответственно, не имеет всех атрибутов таблицы. Преобразуем его в таблицу:
А вот это уже таблица. Переименуем, изменим типа данных на Date:
Получаем таблицу со списком дат, но без указания типов этих дат. “Вытащим” типы данных из первой созданной таблицы. Для этого объединим таблицы:
Если мы вызвали команду объединения, находясь во второй таблице, то эта вторая таблица автоматически встанет в качестве первой объединяемой таблицы. Нам нужно выбрать вторую — это данные, загруженные с Портала открытых данных. Необходимо указать, по каким столбцам сопоставлять данные — выбираем в обеих таблицах колонку Date:
Для каждой строки создалась подтаблица из данных присоединённой таблицы. Развернём колонки:
Снимем галочку использования названия таблицы в качестве префикса, снимем галочку со столбца Date:
В результате получим таблицу, у которой будут проставлены типы дат у выходных и  сокращённых рабочих дней. У части дат будет null вместо типа даты. Исходя из логики загруженного производственного календаря делаем вывод, что это простые рабочие дни. Заменим null на слово “Рабочий”:
Вот теперь — всё. Осталось только загрузить :)
Итоговый код второго запроса:

let

    date_start = #date(2015, 1, 1),

    date_end = #date(2023, 1, 1),

    date_list = List.Dates(

                        date_start,                                    

                        Duration.Days(date_end — date_start) + 1,      

                        #duration(1, 0, 0, 0)                        

    ),

    #»Преобразовано в таблицу» = Table.FromList(date_list, Splitter.SplitByNothing(), null, null, ExtraValues.Error),

    #»Переименованные столбцы» = Table.RenameColumns(#»Преобразовано в таблицу»,{{«Column1», «Date»}}),

    #»Измененный тип» = Table.TransformColumnTypes(#»Переименованные столбцы»,{{«Date», type date}}),

    #»Объединенные запросы» = Table.NestedJoin(#»Измененный тип», {«Date»}, #»data-20191112T1252-structure-20191112T1247″, {«Date»}, «data-20191112T1252-structure-20191112T1247», JoinKind.LeftOuter),

    #»Развернутый элемент data-20191112T1252-structure-20191112T1247″ = Table.ExpandTableColumn(#»Объединенные запросы», «data-20191112T1252-structure-20191112T1247», {«Date type»}, {«Date type»}),

    #»Замененное значение» = Table.ReplaceValue(#»Развернутый элемент data-20191112T1252-structure-20191112T1247″,null,»Рабочий»,Replacer.ReplaceValue,{«Date type»})

in

    #»Замененное значение»

Подробная инструкция так же в видео.

Skip to content

Количество рабочих дней между двумя датами в Excel

Довольно распространенная задача: определить количество рабочих дней в период между двумя датами – это частный случай расчета числа дней, который мы уже рассматривали ранее. Тем не менее, в Excel для этого даже существуют специальные функции.

Не совсем правильно будет пользоваться простейшими методами вычитания одной даты из другой либо функцией РАЗНДАТ. Ведь мы при этом не учитываем наш график труда и отдыха, что весьма важно.

Microsoft Excel имеет две основных функции, специально предназначенных для расчета будних дней – РАБДЕНЬ (WORKDAY) и ЧИСТРАБДНИ (NETWORKDAYS). Мы также остановимся на дополнительных РАБДНИ.МЕЖД и ЧИСТРАБДНИ.МЕЖД, которые могут быть очень полезными.

Функция РАБДЕНЬ определяет момент времени, который наступит через какое-то количество рабочих дней в будущем или в прошлом. Вы можете использовать ее для добавления или вычитания рабочих дней к определенной точке времени.

Используя формулу ЧИСТРАБДНИ, вы можете рассчитать, сколько рабочих дней во временном интервале.

  1. Функция РАБДЕНЬ.
  2. Как добавить или вычесть рабочие дни.
    • Настраиваем свой график выходных дней.
  3. Как рассчитать, сколько рабочих дней между двумя датами?
    • А если у нас свой особенный график труда и отдыха?
  4. Как определить ближайший рабочий день?
  5. Возможные ошибки при расчетах.

А теперь давайте подробнее рассмотрим каждую их них отдельно и посмотрим, как можно использовать для расчета будних дней в ваших таблицах Excel.

Функция РАБДЕНЬ.

Она возвращает момент времени, который наступит через определенное число рабочих дней (или наступил ранее). Она не учитывает дни отдыха и любые праздники, которые вы отдельно укажете.

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

РАБДЕНЬ — это встроенная функция в Excel 2007, 2010, 2013 и 2016. Ее можно ввести руками либо при помощи мастера функций. В более ранних версиях вам нужно специально включать пакет инструментов анализа.

Вам необходимо использовать следующие аргументы:

РАБДЕНЬ(дата_начала; дни; [праздничные_дни])

Первые два обязательны, а последний – по желанию:

  • Дата_начала – с нее начинается подсчет дней.
  • Дни — рабочие дни, которые нужно добавить или вычесть из начальной точки отсчета. Положительное число возвращает будущий момент времени, отрицательное — возвращает в прошлое.
  • Праздничные_дни — необязательный список дат, которые следует считать нерабочими днями. Это может быть либо диапазон ячеек, содержащих даты, которые вы хотите исключить из расчетов, либо константа массива.

Теперь, когда вы знаете основы, давайте посмотрим, как вы можете использовать РАБДЕНЬ в ваших таблицах Excel.

Как добавить или вычесть рабочие дни.

Чтобы рассчитать рабочие дни в Эксель, следуйте этим простым правилам:

  • Чтобы добавить будние дни, введите положительное число в качестве аргумента дни в формуле РАБДЕНЬ.
  • Чтобы вычесть будние дни, используйте там же отрицательное число.

Предположим, у вас в ячейке A10 указан начальный момент времени, а список праздников — в ячейках А2: А7. Вы хотите узнать, какое число будет через 90 рабочих дней в будущем и прошлом. 

Вы можете сделать это, используя следующие формулы:

Чтобы добавить столько же к начальной точке, но учитывая праздничные дни в А2: А7:

=РАБДЕНЬ($A$10;90;$A$2:$A$7)

Чтобы вычесть 90 рабочих дней, исключая праздники:

=РАБДЕНЬ($A$10;-90;$A$2:$A$7)

Чтобы рассчитать сроки на основе текущей даты, используйте функцию СЕГОДНЯ() в качестве точки начала:

Чтобы добавить 90 рабочих дней:

=РАБДЕНЬ(СЕГОДНЯ();90;$A$2:$A$7)

Чтобы переместиться на такое же время назад по отношению к сегодня:

=РАБДЕНЬ(СЕГОДНЯ();-90)

Чтобы указать время начала непосредственно в формуле, используйте формулу ДАТА():

=РАБДЕНЬ(ДАТА(2020;1;7);90;$A$2:$A$7)

На следующем скриншоте показаны результаты всех этих и еще нескольких формул РАБДЕНЬ:

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

=РАБДЕНЬ($A$10;С1;$A$2:$A$7)

Где A10 — начальная датировка, а C1 — число рабочих дней до (отрицательные числа) или после (положительные числа) нее, без учета праздников.

Настраиваем свой график выходных дней.

В случае, если у вас применяется какой-то особенный график нерабочих дней (не суббота и воскресенье), то вам в помощь – формула РАБДЕНЬ.МЕЖД  (WORKDAY.INTL в английской версии).

Она появилась в Excel 2010, в более старых версиях программы ее нет.

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

Синтаксис ее выглядит следующим образом:

РАБДЕНЬ.МЕЖД (дата_начала, дни, [выходные], [праздничные_дни])

Первые два аргумента являются обязательными и знакомыми нам:

Дата_начала – начальный момент времени.

Дни — будние дней до (отрицательное значение) или после (положительное значение) начальной точки. Если этот аргумент в результате каких-то расчетов передается в виде десятичного числа, то дробная часть отбрасывается.

Последние два аргумента являются необязательными:

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

Число

Выходные дни

1 или отсутствует

Суббота Воскресенье

2

Воскресенье понедельник

3

Понедельник вторник

4

Вторник Среда

5

Среда Четверг

6

Четверг Пятница

7

Пятница Суббота

11

Только воскресенье

12

Только понедельник

13

Только вторник

14

Только среда

15

Только четверг

16

Только в пятницу

17

Только суббота

Текст для указания выходного дня — серия цифр из семи нулей и единиц, представляющих семь дней недели, начиная с понедельника. 1 означает нерабочий день, и 0 — соответственно наоборот. Например:

  • «0000010» — суббота — отдыхаем.
  • «1000001» — понедельник и воскресенье — отдыхаем.

И вот как это может выглядеть на примере:

Я бы рекомендовал обратить внимание на конструкцию

=РАБДЕНЬ.МЕЖД($A$10;90;»1000001″;$A$2:$A$7)

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

Все остальное, думаю, достаточно хорошо понятно из скриншота.

Замечание. Функции Excel РАБДЕНЬ и РАБДЕНЬ.МЕЖД возвращают порядковые номера (числа), представляющие даты. Чтобы они отображались как нужно, выделите нужные ячейки и нажмите Ctrl + 1, чтобы открыть диалоговое окно «Формат ячеек». На вкладке «Число» выберите «Дата»  и определите нужный формат. 

Как рассчитать, сколько рабочих дней между двумя датами?

В ситуациях, когда вам нужно получить число рабочих дней в каком-то временном промежутке, используйте формулу ЧИСТРАБДНИ() (в английском варианте – NETWORKDAYS) :

ЧИСТРАБДНИ (дата_начала; дата_окончания; [праздничные_дни])

Первые два аргумента должны уже быть вам знакомы, а третий (необязательный) аргумент позволяет исключить пользовательский список праздников из подсчета.

Чтобы узнать, сколько будних дней между двумя точками в столбцах A и B, используйте следующую формулу:

=ЧИСТРАБДНИ(A10;B10)

При желании вы можете ввести свой список праздников в отдельный диапазон и дополнить формулу, чтобы исключить эти дни:

=ЧИСТРАБДНИ(A10;B10;A2:A7)

В результате учитываются только будние дни.

А если у нас свой особенный график труда и отдыха?

Если вам нужно обрабатывать какие-то особенные нерабочие дни (например, отдыхаем только в воскресенье, в понедельник и воскресенье и т.д), используйте функцию ЧИСТРАБДНИ.МЕЖД, которая позволяет указать, какие дни недели предназначены для отдыха.

ЧИСТРАБДНИ.МЕЖД  (WORKDAY.INTL в английском варианте) — более мощная модификация функции ЧИСТРАБДНИ, которая работает с пользовательскими параметрами выходных . Как и его предшественница, она возвращает число рабочих дней в будущем или в прошлом, но позволяет вам определить, какие именно дни недели в вашем графике нужно считать нерабочими.

Формула ЧИСТРАБДНИ.МЕЖД  появилась впервые в Excel 2010, и поэтому недоступна в более ранних версиях программы.

Синтаксис ее выглядит следующим образом:

ЧИСТРАБДНИ.МЕЖД (дата_начала, дни, [выходные], [праздничные_дни])

Первые два аргумента являются обязательными и встречались нам уже неоднократно:

Дата_начала — начальная точка.

Дни — будние дней до (отрицательное значение) или после (положительное значение) точки начала. Если этот аргумент в результате каких-то расчетов предоставляется в виде десятичного числа, то он усекается до целого.

Последние два аргумента являются необязательными:

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

Число

Выходные дни

1 или отсутствует

Суббота Воскресенье

2

Воскресенье понедельник

3

Понедельник вторник

4

Вторник Среда

5

Среда Четверг

6

Четверг Пятница

7

Пятница Суббота

11

Только воскресенье

12

Только понедельник

13

Только вторник

14

Только среда

15

Только четверг

16

Только в пятницу

17

Только суббота

Текст для указания выходного дня — серия цифр из семи нулей и единиц, представляющих семь дней недели, начиная с понедельника. 1 означает день отдыха, а 0 — будний день. Например:

  • «0000011» — суббота и воскресенье – не работаем.
  • «1000001» — понедельник и воскресенье — отдыхаем.

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

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

А теперь несколько примеров.

=ЧИСТРАБДНИ.МЕЖД(A10;B10;1) – это знакомый нам вариант, когда нерабочими считаются суббота и воскресенье.

А вот =ЧИСТРАБДНИ(A10;B10;11) – отдых только в воскресенье,

=ЧИСТРАБДНИ.МЕЖД(A10;B10;2) – в воскресенье и понедельник. Такой расчет полезен, если в вашей организации свой график работы, не такой, как у всех.

=ЧИСТРАБДНИ.МЕЖД(A11;B11;»1100000″;$A$2:$A$7) 

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

Вы можете объединить полученное число со своим собственным сообщением, склеив их при помощи оператора &.

Например, давайте посмотрим, сколько нужно еще отработать до конца 2020 года. Для этого введем 31 декабря 2020 года в формате даты, и используем следующее выражение:

=»Осталось «&ЧИСТРАБДНИ(СЕГОДНЯ();ДАТА(2020;12;31);A2:A7)&» дн. до конца года!»

Ух, осталось всего 203 дня! Не так много, как я думал :)
Примечание. Чтобы учесть свой индивидуальный график работы, используйте ЧИСТРАБДНИ.МЕЖД().

Как определить ближайший рабочий день?

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

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

как рассчитать ближайший рабочий день

Для субботы подсчитать дату ближайшего понедельника можно двумя способами:

=РАБДЕНЬ(A2-1;1)

или

=ЕСЛИ(ДЕНЬНЕД(A3;2)>5;A3+(8-ДЕНЬНЕД(A3;2));A3)

Ближайший рабочий день в прошлом (то есть прошлая пятница) определяется так:

=ЕСЛИ(ДЕНЬНЕД(A4;2)>5;МИН(A4-(ДЕНЬНЕД(A4;2)-5);A4);A4)

Ну и если немного усложнить условие — если день попадает на субботу, тогда ближайший рабочий день — прошедшая пятница, а если на воскресенье — тогда предстоящий понедельник:

=ЕСЛИ(ДЕНЬНЕД(A6;2)>6;A6+(8-ДЕНЬНЕД(A6;2));МИН(A6-(ДЕНЬНЕД(A6;2)-5);A6))

Как видите, на слишком уж сложно.

Возможные ошибки при расчетах.

Если ваша формула РАБДЕНЬ, РАБДЕНЬ.МЕЖД, ЧИСТРАБДНИ или ЧИСТРАБДНИ.МЕЖД возвращает ошибку #ЧИСЛО! или #ЗНАЧ!, причина может быть одной из следующих:

  • аргументы начала и конца временного отрезка передают неверные данные (не являются датой, записаны как текст скорее всего)
  • аргумент «выходные» указан неверно (например, 22 или «000000011»).

Надеюсь, эти примеры и инструкции были вам полезны. Если еще остались вопросы — пишите в комментариях. Постараюсь ответить.

Также рекомендуем о работе с датами:

Как перевести время в число В статье рассмотрены различные способы преобразования времени в десятичное число в Excel. Вы найдете множество формул для преобразования времени в часы, минуты или секунды. Поскольку Microsoft Excel использует числовую систему для работы с временем, вы можете…
Формат времени в Excel Вы узнаете об особенностях формата времени Excel, как записать его в часах, минутах или секундах, как перевести в число или текст, а также о том, как добавить время с помощью…
Как вывести месяц из даты На примерах мы покажем, как получить месяц из даты в таблицах Excel, преобразовать число в его название и наоборот, а также многое другое. Думаю, вы уже знаете, что дата в…
Как быстро вставить сегодняшнюю дату в Excel? Это руководство показывает различные способы ввода дат в Excel. Узнайте, как вставить сегодняшнюю дату и время в виде статической метки времени или динамических значений, как автоматически заполнять столбец или строку…

04.01.2023

Другие года: 2023, 2022, 2021, 2020, 2019, 2018, 2017, 2016.

Согласно статье 112 Трудового кодекса Российской Федерации (в ред. ФЗ № 35-ФЗ от 23 апреля 2012 года) нерабочими праздничными днями в Российской Федерации являются:

Праздники в 2023 году:
✅ 31 декабря 2022 года — выходной день.
✅ 1, 2, 3, 4, 5, 6 и 8 января — Новый год (новогодние каникулы);
✅ 7 января — Рождество Христово;
✅ 23 февраля — День защитника Отечества;
✅ 8 марта — Международный женский день;
✅ 1 мая — Праздник Весны и Труда;
✅ 9 мая — День Победы;
✅ 12 июня — День России;
✅ 4 ноября — День народного единства.

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

Согласно Постановлению Правительства РФ от 29.08.2022 № 1505 «О переносе выходных дней в 2023 году» (ссылка) разработан перенос выходных дней в 2023 году с праздничных дней:
• с 01.01 (воскресенье) на 24.02 (пятница);
• с 08.01 (воскресенье) на 08.09 (понедельник);
Предпраздничные дни в 2023 году:
• вторник 22 февраля, вторник 7 марта, пятница 3 ноября.
Итого 3 предпраздничных дня в 2023 году.

Скачать Производственный календарь 2023 в excel (xls, таблица «Норма времени» на 2 странице)

Согласно статье 112 Трудового кодекса РФ при совпадении выходного и нерабочего праздничного дней выходной день переносится на следующий после праздничного рабочий день. Исключение составляют выходные дни, совпадающие с нерабочими праздничными днями января. Изменениями, внесенными в ст. 112 ТК РФ Федеральным законом от 23.04.2012 № 35-ФЗ, предусматривается, что Правительство Российской Федерации вправе переносить два выходных дня из числа выходных дней, совпадающих с нерабочими январскими праздничными днями, на другие дни в очередном календарном году.

Норма рабочего времени в 2023 году

Период Д кален
дарных
Д рабочих Д выход,
празд.
Д пред-
празд.
Часы 40-
часовая
Часы 36-
часовая
Часы 24-
часовая
Январь 31 17 14 0 136,0 122,4 81,6
Февраль 28 18 10 1 143,0 128,6 85,4
Март 31 22 9 1 175,0 157,4 104,6
1 квартал 90 57 33 2 454,0 408,4 271,6
Апрель 30 20 10 0 160,0 144,0 96,0
Май 31 20 11 0 160,0 144,0 96,0
Июнь 30 21 9 0 168,0 151,2 100,8
2 квартал 91 61 30 0 488,0 439,2 292,8
1 полугодие 181 118 63 2 942,0 847,6 564,4
Июль 31 21 10 0 168,0 151,2 100,8
Август 31 23 8 0 184,0 165,6 110,4
Сентябрь 30 21 9 0 168,0 151,2 100,8
3 квартал 92 65 27 0 520,0 468,0 312,0
Октябрь 31 22 9 0 176,0 158,4 105,6
Ноябрь 30 21 9 1 167,0 150,2 99,8
Декабрь 31 21 10 0 168,0 151,2 100,8
4 квартал 92 64 28 1 511,0 459,8 306,2
2 полугодие 184 129 55 1 1 031,0 927,8 618,2
Год 365 247 118 3 1 973,0 1 775,4 1 182,6

Согласно статье 91 ТК РФ (в ред. Федерального закона от 22 июля 2008 г. N 157-ФЗ) Порядок исчисления нормы рабочего времени на определенные календарные периоды (месяц, квартал, год) в зависимости от установленной продолжительности рабочего времени в неделю определяется федеральным органом исполнительной власти, осуществляющим функции по выработке государственной политики и нормативно-правовому регулированию в сфере труда.» (Собрание законодательства Российской Федерации, 2008, N 30 (ч. I), ст. 3613).

В настоящее время действует Порядок исчисления нормы рабочего времени на определенные календарные периоды времени (месяц, квартал, год) в зависимости от установленной продолжительности рабочего времени в неделю, утвержденный приказом Минздравсоцразвития России от 13 августа 2009 г. N 588н (Бюллетень трудового и социального законодательства РФ, 2009, N 10).
Согласно установленному Порядку исчисления нормы рабочего времени данная норма исчисляется по расчетному графику пятидневной рабочей недели с двумя выходными днями в субботу и воскресенье, исходя из продолжительности ежедневной работы (смены), например, при 40-часовой рабочей неделе — 8 часов, при продолжительности рабочей недели 36 часов она составит 7,2 часа; при 24-часовой рабочей неделе — 4,8 часа. Продолжительность рабочего дня или смены, непосредственно предшествующих нерабочему праздничному дню, уменьшается на один час.
Рассчитанная в приведенном порядке норма рабочего времени распространяется на все режимы труда и отдыха.

Итого
Всего в 2023 году 365 дней (не високосный год) при пятидневной рабочей неделе с двумя выходными днями; 247 рабочих дня, в том числе 3 предпраздничных дня (сокращенных на один час рабочих дней) и 118 выходных и праздничных дней.

Норма рабочего времени в 2023 году составляет:
при 40-часовой рабочей неделе — 1 973,0 часа = 8,0 час. x 247 дней — 3 часа;
при 36-часовой рабочей неделе — 1 775,4 часа = 7,2 час. x 247 дней — 3 часа;
при 24-часовой рабочей неделе — 1 182,6 часа = 4,8 час. x 247 дней — 3 часа.

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

  • Как посчитать количество рабочих дней между двумя датами функцией ЧИСТРАБДНИ
  • Функция ЧИСТРАБДНИ.МЕЖД — когда полезно использовать
  • Для чего нужны функции РАБДЕНЬ и РАБДЕНЬ.МЕЖД

Как посчитать количество рабочих дней между двумя датами функцией ЧИСТРАБДНИ

Функция ЧИСТРАБДНИ используется в Excel,чтобы посчитать количество рабочих дней между двумя датами.

Синтаксис функции:

=ЧИСТРАБДНИ(нач_дата; кон_дата; [праздники])

нач_дата и кон_дата — начальная и конечная даты диапазона. Конечная дата обязательно должна быть больше начальной.

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

Конечно, в качестве аргумента [праздники] можно указывать не только праздничные дни, а любые дни, которые нужно исключить из числа рабочих дней.

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

Рассмотрим пример расчета количества рабочих дней между двумя датами. Для наглядности приведен календарь за данный месяц.

  • Без учета праздников (аргумент [праздники] не указан)

количество рабочих дней между двумя датами

Как видите, формула посчитала количество будних дней (понедельник-пятница), не учитывая, что 2-3 и 9-10 мая — это нерабочие дни в связи с праздниками.

  • С учетом аргумента [праздники]

Чтобы из количества рабочих дней исключить нерабочие праздничные дни (или любые другие дни, которые нужно исключить), сначала нужно сделать отдельный список праздничных дней.

Затем добавим в формулу аргумент [праздники]. Обратите внимание, что ссылки на диапазон лучше закрепить абсолютными ссылками.

количество рабочих дней между двумя датами

Другой вариант — создать именованный диапазон для ячеек с датами праздничных дней. Для этого нужно выделить диапазон ячеек, в поле имени указать нужное имя и нажать Enter.

количество рабочих дней между двумя датами

Теперь, когда будете считать количество рабочих дней между двумя датами с учетом праздников, в качестве аргумента [праздники] можно указать имя диапазона.

количество рабочих дней между двумя датами

Функция ЧИСТРАБДНИ.МЕЖД — когда полезно использовать

Отличие функции ЧИСТРАБДНИ.МЕЖД от функции ЧИСТРАБДНИ: функция ЧИСТРАБДНИ при расчете количества рабочих дней между двумя датами учитывает стандартные выходные дни (суббота и воскресенье). А для функции ЧИСТРАБДНИ.МЕЖД можно задать альтернативные выходные дни.

Поэтому функция ЧИСТРАБДНИ.МЕЖД незаменима для учета отработанных дней при скользящем графике.

Синтаксис функции:

=ЧИСТРАБДНИ.МЕЖД(нач_дата; кон_дата; [выходные]; [праздники])

Аргументы нач_дата, кон_дата и [праздники] — аналогичны функции ЧИСТРАБДНИ.

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

количество рабочих дней между двумя датами
Давайте рассмотрим ее на примере. В качестве выходных выберем дни Среда и Четверг. 

На календаре зеленым закрашены дни, которые формула посчитала рабочими.

Из диапазона дней между датами 01.05.2022 и 20.05.2022 вычтены праздничные дни (диапазон “праздники” из предыдущего примера) и выходные дни (в данном примере СР и ЧТ).

количество рабочих дней между двумя датами

Для чего нужны функции РАБДЕНЬ и РАБДЕНЬ.МЕЖД 

Функция РАБДЕНЬ фактически является зеркальной для функции ЧИСТРАБДНИ:

  • результатом функции ЧИСТРАБДНИ является количество рабочих дней между двумя датами
  • результатом функции РАБДЕНЬ является дата, отстоящее на заданное число рабочих дней вперед или назад от заданной даты.

Синтаксис функции:

=РАБДЕНЬ(нач_дата; число дней; [праздники])

нач_дата — начальная дата, от которой будет отсчитываться количество рабочих дней

число дней — число рабочих дней, которое будет прибавлено к начальной дате.

[праздники] — так же, как и для функции ЧИСТРАБДНИ можно отдельно указать ссылку на ячейку или диапазон ячеек, в которых указаны даты праздничных дней.

Рассмотрим пример использования функции РАБДЕНЬ. Количество дней укажем 15. Обратите внимание: количество дней мы взяли из результата вычисления функции ЧИСТРАБДНИ, а результат получили равный второму аргументу функции (кон_дата) ЧИСТРАБДНИ — 20.05.2021. Именно поэтому эти функции считаются зеркальными.

количество рабочих дней между двумя датами

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

Использование аргумента [праздники] — такое же, как в функции ЧИСТРАБДНИ. Праздники можно указать ссылкой на ячейки или именованным диапазоном.

Пример использования функции РАБДЕНЬ с аргументом [праздники].

количество рабочих дней между двумя датами

Функция РАБДЕНЬ.МЕЖД аналогична функции РАБДЕНЬ, только есть возможность указать альтернативные выходные дни (аналогично функции ЧИСТРАБДНИ.МЕЖД). 

Синтаксис функции:

=РАБДЕНЬ.МЕЖД(нач_дата; число дней; [выходные];[праздники])

Числовые коды для аргумента [праздники] аналогичны кодам для функции ЧИСТРАБДНИ.МЕЖД (см. выше в этой статье).

Рассмотрим пример использования функции РАБДЕНЬ.МЕЖД. Начальная дата 01.05.2022, количество дней — 15, в качестве выходных дней укажем аргумент 2 (ВС, ПН), праздники — именованный диапазон “праздники” из предыдущих примеров.

количество рабочих дней между двумя датами

Зеленым цветом закрашены указанное количество рабочих дней — 15. Следовательно, дата, которая отстает от 01.05.2022 на 15 дней с учетом выходных ВС и ПН и праздничных дней — 25.05.2022.

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

Мы ВКонтакте

Вам может быть интересно:

Like this post? Please share to your friends:
  • Календаря в excel 2007
  • Календарь по месяцам word 2022
  • Календарь день рождений шаблон word
  • Календарь этапов проектов в excel
  • Календарь платежей в excel скачать бесплатно