Страницы: 1
RSS
WorkHours (РАБЧАСЫ). Функция для получения разницы между двумя датами в часах с учётом множества факторов
 
Попросили сделать вариант - решил раскрыть тему и зафиксировать результат, чтобы не потерять
Ход разработки
WorkHours
WorkHoursFull
Коды
Обо всех нестыковках в работе, вопросах, пожеланиях и предложениях прошу сразу сообщать в этой теме
Нестыковки сопровождать файлом из этого поста с заполненными данными, вызывающими вопросы/ошибки и подробными комментариями
Пожелания и предложения должны быть подробно аргументированы - зачем это и чем лучше того, что есть

АНАЛОГИ

Темы:
    • Подсчёт количества рабочих дней исходя из дней недели

WorksheetFunctions:
    • РАЗНДАТ
    • ЧИСТРАБДНИ
    • РАБДЕНЬ (+ пример)
    • Прочие функции даты и времени
    • Ещё один справочник по функциям даты-времени

VBA:
    • WorkHours из надстройки PLEX этого сайта
    • РАБ_ЧАС (Multex)


Модераторам: если решите перенести в Копилку, то я не против  ;)
Изменено: Jack Famous - 30.03.2021 12:49:46
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, Алексей, пошто функция Variant???? Если ради указания что нет аргументов корректных, так это лишнее.
Код очень бегло просмотрел, нутром чую - усложнил.
Изменено: БМВ - 26.02.2021 07:57:12
По вопросам из тем форума, личку не читаю.
 
БМВ, привет, Миш  :)
Цитата
БМВ: пошто функция Variant … ради указания что нет аргументов корректных?
всё верно - только для этого. Из-за сложности, просто выводить ошибку очень мало - слишком много что может пойти не так. Вот и решил немного "подсказать"  :)
Цитата
БМВ: нутром чую - усложнил
код напичкан проверками и заточен на скорость - отсюда и простыня. Это при том, что повторяющиеся проверки я и так вынес в отдельную функцию. Можно улучшить удобочитаемость кода, добавив "модульности" - разбить на отдельные функции с параметрами и футболить их (параметры) между ними. Может доберусь до этого, но пока мне и так нравится  :)
Изменено: Jack Famous - 26.02.2021 12:44:08
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, за функцию спасибо! Можно ли добавить еще параметр, чтобы вот это условие " Если в дате есть время то при расчёте оно будет учитываться, как начало или, соответственно, конец рабочего дня для этой даты (приоритет)" не учитывалось, а именно, чтобы если в дате есть время, то начало или, соответственно, конец рабочего дня все равно бы брались из заданных параметров времени начала (окончания) раб. дня.
Проще говоря, если начало раб. дня задано в 9:00, а в дате начала расчета задано время 6:00, то расчет начинается с 9:00, эти 3 часа разницы не учитывать. Аналогично, если дата окончания раб. дня задана на 17:00, а в дате окончания расчета стоит время 18:00, то расчет идет только до 17:00. WorkHours из Plex именно так считает.
 
Цитата
Zauberer2: Можно ли добавить еще параметр
незачем
Цитата
Jack Famous: Если не нужно учитывать время границ отсчёта, то преобразуйте ДатуВремя в обычную дату - например с помощью функции =ЦЕЛОЕ(ВремяДата)
то есть будет =WorkHours(ЦЕЛОЕ(A1);ЦЕЛОЕ(B1) … )

Пожалуйста  ;)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, Добрый день. А можно еще добавить в файл возможность вычета времени обеда, указав его где-нибудь отдельно? В моем случае обедов будет 2 раза в сутки, потому что работа идет посменно круглосуточно. Спасибо
 
Dilshod Ibragimov, здравствуйте
Функция и так перегружена, поэтому вычитайте обеды отдельно
=WorkHours()-(2*количество часов каждого обеда*количество дней/24)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх