Nedcentr.ru

НЕД Центр
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

График рабочих дней без выходных и праздников в Excel

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

Делаем заголовки

В ячейку A1 вбиваем следующую формулу: =»Календарь на » & ГОД(СЕГОДНЯ()) & » год». Функция СЕГОДНЯ() возвращает текущую дату (мы часто будем ей пользоваться). Соответственно связка функций ГОД(СЕГОДНЯ()) возвратит нам текущий год.

Теперь создадим заголовки месяцев. В ячейку где стоит Январь запишем следующую формулу =ДАТА(ГОД(СЕГОДНЯ());1;1). Эта функция возвращает первое января текущего года (01.01.2015 в моем случае). Применим к этой ячейке такой формат, чтобы отображалось только название месяца. Для этого откроем формат ячеек сочетанием клавиш Ctrl + 1 и выберем соответствующий формат (см. рисунок).

Для создания заголовков последующих месяцев будем использовать еще одну очень полезную функцию =ДАТАМЕС(B3;1). Эта функция возвращает дату отстоящую от указанной на заданное число месяцев (в нашем случае на один). Таким образом, у нас получается следующая картина (дополнительно я добавил немного форматирования):

Проставляем числа

Для автоматического проставления чисел в календаре мы будем использовать всего одну формулу — формулу массива. На вид звучит страшновато, но если разобраться — все легко и просто. Выделяем ячейки B5:H10 и вводим следующую формулу (не спешим жать Enter):
=ДАТА(ГОД(B3);МЕСЯЦ(B3);1-1)-(ДЕНЬНЕД(ДАТА(ГОД(B3);МЕСЯЦ(B3);1-1))-1)+<0:1:2:3:4:5:6>*7+

Вместо Enter нажимаем сочетание клавиш Ctrl+Shift+Enter, вставляя таким образом формула массива. В результате в выделенном диапазоне получаем числа указанного в ячейке B3 месяца.

Аналогичную операцию проводим с другими месяцами или просто копируем диапазон дат января в следующие месяца. Получаем следующую картину:

Форматируем

Отформатируем ячейки таким образом, чтобы они содержали только числа (а не полностью даты). Выделяем даты, открываем формат ячеек (Ctrl+1) и вводим вручную следующий формат:

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

Добавляем условного форматирования

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

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

Автоматически выделяем текущую дату в календаре

Для этого создаем еще одно правило условного форматирования. Ячейка будет форматироваться только в том случае, если ее значение будет равно текущей дате (=СЕГОДНЯ()):

Выделим выходные дни в календаре Excel

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

Добавляем праздничные дни

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

Вернемся в наш календарь и создадим еще одно правило условного форматирования. Формула условного форматирования будет проверять является ли дата праздником. И в случае если формула вернет ИСТИНА ячейка будет форматироваться. Вот эта формула:
=НЕ(ЕОШИБКА(ПОИСКПОЗ(B5;ДВССЫЛ(«Праздники[Праздничные дни]»);0))). Стоит отметить, что при добавлении или изменении праздничных дней, календарь будет автоматически форматироваться.

Осталось скопировать ячейки B5:H10 в другие месяца и наш автоматический календарь готов и может служить нам не один год.

Добавить время

Чтобы добавить определенное количество часов за раз, вы можете добавить часы, деленные на 24, или использовать функцию ВРЕМЯ.

В показанном примере формула в D5:

Примечание. Убедитесь, что результаты форматируются как время.

Время в Excel составляет 24 часа. Один час времени равен 1/24, а 1 минута времени равна 1 / (24 * 60) = 1/1440.

В результате, если у вас есть десятичное значение в течение 6 часов и время в A1, вы можете добавить 6 часов времени к значению в A1 следующим образом:

Вы также можете добавить временные значения с помощью функции ВРЕМЯ. Чтобы добавить 15 часов к времени в A1, используйте:

Функция ВРЕМЯ избавляет вас от необходимости запоминать формулу для преобразования десятичных часов в Excel. Однако обратите внимание на то, что функция ВРЕМЯ будет возвращаться к нулю, когда значения превысят 24 часа.

Например, обратите внимание, как два подхода возвращают разные результаты в течение 25 часов:

= ВРЕМЯ(25;0;0) = 0;041667 = 1:00 в тот же день (1 час)

= 25/24 = 1.041667 = 1:00 на следующий день (25 часов)

Функция ВРЕМЯ возвращает эквивалент 1 часа, а 25/24 возвращает полное значение.

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

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

Здесь функция ОСТАТ заботится о негативной проблеме, используя функцию ОСТАТ для «переворачивания» отрицательных значений в требуемое положительное значение.

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

Добавить минуты к часу

Чтобы добавить определенное количество минут за раз, вы можете добавить минуты, деленные на 1440, или использовать функцию ВРЕМЯ.

Читать еще:  Каковы способы защиты участников долевого строительства?

В показанном примере формула в D5:

Примечание. Убедитесь, что результаты форматируются как время.

Время в Excel составляет 24 часа. Один час времени равен 1/24, а 1 минута времени равна 1 / (24 * 60) = 1/1440.

В результате, если у вас есть десятичное значение в течение 15 минут и время в A1, вы можете добавить 15 минут времени к значению в A1 следующим образом:

Вы также можете добавить временные значения с помощью функции ВРЕМЯ. Чтобы добавить 15 минут к времени в A1, используйте:

Функция ВРЕМЯ избавляет вас от необходимости запоминать формулу для преобразования десятичных минут в Excel. Однако обратите внимание на то, что функция ВРЕМЯ будет возвращаться к нулю, когда значения превысят 24 часа.

Например, 25 часов времени составляет 1500 минут. Обратите внимание на отличия:

= ВРЕМЯ (0;1500;0) = 0;041667 = 1:00 в тот же день

= 1500/1440 = 1.041667 = 1:00 на следующий день

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

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

Здесь функция ОСТАТ заботится о негативной проблеме, используя функцию ОСТАТ для «переворачивания» отрицательных значений в требуемое положительное значение.

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

График рабочих дней без выходных и праздников в Excel

В этой статье я говорю о добавлении дней к заданной дате, исключая выходные и праздничные дни, что означает добавление рабочих дней (с понедельника по пятницу) только в Excel.

Добавьте дни, включая выходные и праздничные дни, с помощью Kutools for Excel

Считайте выходные или будние дни только между двумя заданными датами с помощью Kutools for Excel

Добавьте рабочие дни, исключая выходные, с помощью формулы

Чтобы добавить дни, исключая выходные, вы можете сделать следующее:

Выберите пустую ячейку и введите эту формулу = РАБДЕНЬ (A2; B2) , и нажмите Enter ключ к результату.

Наконечник: В формуле A2 — это начальная дата, B2 — это дни, которые вы хотите добавить.

Теперь отображается дата окончания, которая добавляет 45 рабочих дней, исключая выходные.

Примечание: Если рассчитанный результат представляет собой 5-значное число, вы можете отформатировать его до даты, нажав Главная > Формат номера > Короткое свидание. Смотрите скриншот:

Легко добавлять дни / годы / месяц / часы / минуты / секунды к дате и времени в Excel

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

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

Выберите пустую ячейку и введите эту формулу = РАБДЕНЬ (A2; B2; B4: B6) , Затем нажмите Enter ключ для получения результата. Смотрите скриншот:


Наконечник: В формуле A2 — это начальная дата, B2 — это дни, которые вы хотите добавить, а B4: B6 — праздничные дни, которые вы хотите исключить.

Добавьте дни, включая выходные и праздничные дни, с помощью Kutools for Excel

Если вы хотите добавить дни, включая выходные и праздничные дни, вы можете использовать Kutools for ExcelАвтора Помощник по дате и времени функции.

После бесплатная установка Kutools for Excel, сделайте следующее:

1. Выберите ячейку, в которую помещается результат добавления, щелкните Kutools > Формула Помощник > Помощник по дате и времени.

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

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

С помощью этого помощника вы можете одновременно добавить к дате x год, y месяц и z дней.

Считайте выходные или будние дни только между двумя заданными датами с помощью Kutools for Excel

Работы С Нами Kutools for Excel установлен, вы можете подсчитать количество выходных или будних дней только между двумя заданными датами.

После установки Kutools for Excel, сделайте следующее: (Бесплатная загрузка Kutools for Excel прямо сейчас!)

1. Выберите пустую ячейку, в которую вы поместите результат подсчета, и нажмите Kutools > Формула Помощник > Формула Помощник.

2. Затем в появлении Формула Помощник диалога, выберите Статистический от Тип формулы раскрывающийся список, затем щелкните на Количество рабочих дней между двумя датами in Выберите формулу раздел, затем перейдите в правую часть, нажмите , чтобы выбрать ячейки даты начала и даты окончания.

3. Нажмите Ok, и отсчитывались только дни недели между двумя заданными датами.

Невероятно! Инструмент меняет способ редактирования и просмотра нескольких документов Office.

Открывать файлы в нескольких окнах

Открывайте файлы в одном окне с вкладками с помощью вкладки Office

Читать еще:  Виды бланков строгой отчетности и сущность данных документов

Производственный календарь в 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/

Без лишних «рюшечек», простой, легкий и быстрый сайт, заточенный под одну задачу — отдавать всем желающим производственный календарь за нужный год в 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) . В открывшееся окно вставляем ссылку на соответствующий год, скопированную с сайта:

После нажатия на ОК появляется окно предварительного просмотра, в котором нужно нажать кнопку Преобразовать данные (Transform data) или Изменить данные (Edit data) и мы попадем в окно редактора запросов 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,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 по очереди отработает импорт для каждого года и мы получим столбец, где в каждой ячейке будет содержаться таблица с датами нерабочих дней (содержимое таблицы хорошо видно, если щёлкнуть мышью в фон ячейки рядом со словом Table):

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

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

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

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

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

голоса
Рейтинг статьи
Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector