468 читали · 3 года назад
Подсчитываем рабочие дни в Эксель
Бухгалтерам часто нужно подсчитать количество рабочих дней в месяце, или между двух дат. Специально для этого в Эксель есть функция (и в гугл таблицах тоже): ЧИСТРАБДНИ (NETWORKDAYS) Эта функция принимает первым аргументом начало периода, а вторым — конец. И выводит количество рабочих дней между этими двумя датами. Введем в ячейке A1 функцияю ЧИСТРАБДНИ, а в A4 и A5 — начало и конец периода, и укажем эти ячейки, как аргумент функции. Но просто вычесть субботу и воскресенье — ума много не надо. Наверное, такую функцию можно было бы реализовать самостоятельно...
Давненько мы про производственный календарь не говорили Есть прекраснейший сайт http://xmlcalendar.ru/ — спасибо его создателям — с производственным календарем за разные годы и в разных форматах. XML, TXT, CSV и другие. Ссылки каждый год отличаются только на номер года. А значит, можно загружать данные в таблицы. Например, в формате TXT список всех выходных и праздничных дней года. Ссылка для 2024 года такая: http://xmlcalendar.ru/data/ru/2024/calendar.txt Соответственно, можно получить список для текущего года в Google Таблицах следующей формулой: =IMPORTDATA("http://xmlcalendar.ru/data/ru/" & YEAR(TODAY()) & "/calendar.txt") Но есть еще такое неприятное явление, как рабочие выходные дни (СБ-ВС). Например, в 2024 году это 27 апреля и 28 декабря. Как получить список таких дат? В XML формате календарь есть тип дня t — единица для выходных, 2 для сокращенных рабочих, 3 — то, что нам нужно (рабочий день в СБ / ВС). Можно получить этот список такой формулой (спасибо Михаилу Смирнову за более лаконичный вариант в комментариях): =IMPORTXML("http://xmlcalendar.ru/data/ru/" & YEAR(TODAY()) & "/calendar.xml"; "//day[@t = 3]/@d") Соответственно, если нужны праздники, то t = 1, если сокращенные рабочие, то t = 2. Правда, формат дат в XML календаре такой: MM.DD (04.27). Таблицы его не поймут, даже если применить ДАТАЗНАЧ / DATEVALUE. Поэтому сначала придется поменять день и месяц местами (можно с помощью REGEXREPLACE), а потом добавить DATEVALUE: =ArrayFormula(DATEVALUE(REGEXREPLACE(IMPORTXML("http://xmlcalendar.ru/data/ru/" &YEAR(TODAY()) & "/calendar.xml"; "//day[@t = 3]/@d");"(\d{2})\.(\d{2})";"$2\.$1")))