Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Метод расчёта часов - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Метод расчёта часов (Формулы/Formulas)
Метод расчёта часов
Cere6ellum Дата: Суббота, 29.05.2021, 14:30 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Приветствую уважаемое сообщество.
Бьюсь над проблемой планирования времени.
Прошу помощи.

Пишу на vba.
Постараюсь описать суть задачи.
Есть рабочее время. Допустим с 8:00 до 17:00.
Есть обеденное время с 12:00 до 13:00.
Есть переменная calcHrs, которая содержит в себе некоторое количество часов (4, 5, 6, ...).
Есть стартовое время startTime, с которого и начинается расчёт.
Необходимо расчитать итоговое время resTime, по принципу:
resTime = startTime - calcHrs
Иными словами resTime - это время в прошлом, с которого прошло calcHrs рабочих часов до startTime времени.

Вроде бы просто.
Но здесь имеются подводные камни:
1. Обеденное время не должно учитываться. То есть если результат расчёта попадает на 12:00, нужно вычитать доп.час.
2. Рабочий день ограничен. И если результат расчёта меньше 8:00, необходимо пересчитывать остаток от 17:00 предыдущего дня.

Покажу на примерах.

Пример #1
startTime = 10:00
calcHrs = 4
resTime = 15:00.
Почему resTime = 15:00? Потому что до 8:00 2 часа, и значит остаток нужно считать с конца предыдущего дня. То есть 17:00 - 2 оставшихся часа.
-----
Пример #2
startTime = 14:00
calcHrs = 5
resTime = 8:00.
Почему resTime = 8:00? Потому что с 14-ти до 13-ти проходит час, и не учитывается обед. То есть оставшиеся 4 часа продолжают вычитаться с 12:00, минуя промежуток 12:00-13:00.

Ну и, собственно, главный вопрос. Как уложить всю эту логику в формулу или код?
Я чувствую, что существует очень лаконичное решение, может быть даже из области высшей математики. Но честно не знаю как сделать просто.
Такая вот интересная задача.
Сейчас выполнил в коде Vba только лишь для calcHrs = 5,6,7. При иных значения всё ломается. Да и решение это использует всякие GoTo переходы. Некрасиво в общем.
Как бы вы реализовали решение?


Сообщение отредактировал Cere6ellum - Суббота, 29.05.2021, 14:45
 
Ответить
СообщениеПриветствую уважаемое сообщество.
Бьюсь над проблемой планирования времени.
Прошу помощи.

Пишу на vba.
Постараюсь описать суть задачи.
Есть рабочее время. Допустим с 8:00 до 17:00.
Есть обеденное время с 12:00 до 13:00.
Есть переменная calcHrs, которая содержит в себе некоторое количество часов (4, 5, 6, ...).
Есть стартовое время startTime, с которого и начинается расчёт.
Необходимо расчитать итоговое время resTime, по принципу:
resTime = startTime - calcHrs
Иными словами resTime - это время в прошлом, с которого прошло calcHrs рабочих часов до startTime времени.

Вроде бы просто.
Но здесь имеются подводные камни:
1. Обеденное время не должно учитываться. То есть если результат расчёта попадает на 12:00, нужно вычитать доп.час.
2. Рабочий день ограничен. И если результат расчёта меньше 8:00, необходимо пересчитывать остаток от 17:00 предыдущего дня.

Покажу на примерах.

Пример #1
startTime = 10:00
calcHrs = 4
resTime = 15:00.
Почему resTime = 15:00? Потому что до 8:00 2 часа, и значит остаток нужно считать с конца предыдущего дня. То есть 17:00 - 2 оставшихся часа.
-----
Пример #2
startTime = 14:00
calcHrs = 5
resTime = 8:00.
Почему resTime = 8:00? Потому что с 14-ти до 13-ти проходит час, и не учитывается обед. То есть оставшиеся 4 часа продолжают вычитаться с 12:00, минуя промежуток 12:00-13:00.

Ну и, собственно, главный вопрос. Как уложить всю эту логику в формулу или код?
Я чувствую, что существует очень лаконичное решение, может быть даже из области высшей математики. Но честно не знаю как сделать просто.
Такая вот интересная задача.
Сейчас выполнил в коде Vba только лишь для calcHrs = 5,6,7. При иных значения всё ломается. Да и решение это использует всякие GoTo переходы. Некрасиво в общем.
Как бы вы реализовали решение?

Автор - Cere6ellum
Дата добавления - 29.05.2021 в 14:30
Pelena Дата: Суббота, 29.05.2021, 18:40 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 17892
Репутация: 3982 ±
Замечаний: ±

Excel 2016 & Mac Excel
Приложите файл с несколькими примерами исходных данных и посчитанного вручную результата. Тогда ответ придёт быстрее


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеПриложите файл с несколькими примерами исходных данных и посчитанного вручную результата. Тогда ответ придёт быстрее

Автор - Pelena
Дата добавления - 29.05.2021 в 18:40
Cere6ellum Дата: Понедельник, 31.05.2021, 08:38 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
файл с несколькими примерами исходных данных и посчитанного вручную результата

Во вложении, с формулами.

Не всегда выдают верный результат.
К сообщению приложен файл: Example.xlsx(10.8 Kb)
 
Ответить
Сообщение
файл с несколькими примерами исходных данных и посчитанного вручную результата

Во вложении, с формулами.

Не всегда выдают верный результат.

Автор - Cere6ellum
Дата добавления - 31.05.2021 в 08:38
Pelena Дата: Понедельник, 31.05.2021, 08:58 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 17892
Репутация: 3982 ±
Замечаний: ±

Excel 2016 & Mac Excel
То есть даты не учитываем, работаем в пределах одних суток от стартового времени? И количество часов всегда целое?
Просила же побольше примеров... >(


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеТо есть даты не учитываем, работаем в пределах одних суток от стартового времени? И количество часов всегда целое?
Просила же побольше примеров... >(

Автор - Pelena
Дата добавления - 31.05.2021 в 08:58
Cere6ellum Дата: Понедельник, 31.05.2021, 09:05 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
То есть даты не учитываем, работаем в пределах одних суток от стартового времени? И количество часов всегда целое?
Просила же побольше примеров...

Даты не учитываем, чтобы не нагружать пример. Я их учитываю у себя в коде. Здесь намеренно не указал.
Числа тоже целые, это тоже не проблема всё.
Поэтому и указал именно так, чтобы сосредоточиться лишь на логике.
 
Ответить
Сообщение
То есть даты не учитываем, работаем в пределах одних суток от стартового времени? И количество часов всегда целое?
Просила же побольше примеров...

Даты не учитываем, чтобы не нагружать пример. Я их учитываю у себя в коде. Здесь намеренно не указал.
Числа тоже целые, это тоже не проблема всё.
Поэтому и указал именно так, чтобы сосредоточиться лишь на логике.

Автор - Cere6ellum
Дата добавления - 31.05.2021 в 09:05
Pelena Дата: Понедельник, 31.05.2021, 10:37 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 17892
Репутация: 3982 ±
Замечаний: ±

Excel 2016 & Mac Excel
Пишу на vba

Во вложении, с формулами

%)
макрос-то покажете? Чтобы с нуля не начинать


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
Сообщение
Пишу на vba

Во вложении, с формулами

%)
макрос-то покажете? Чтобы с нуля не начинать

Автор - Pelena
Дата добавления - 31.05.2021 в 10:37
Cere6ellum Дата: Понедельник, 31.05.2021, 15:54 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
макрос-то покажете? Чтобы с нуля не начинать

Решил сделать формулами, чтобы нагляднее было.
Добавил на vba пользовательскую функцию calcTime
К сообщению приложен файл: Example.xlsm(16.9 Kb)
 
Ответить
Сообщение
макрос-то покажете? Чтобы с нуля не начинать

Решил сделать формулами, чтобы нагляднее было.
Добавил на vba пользовательскую функцию calcTime

Автор - Cere6ellum
Дата добавления - 31.05.2021 в 15:54
Cere6ellum Дата: Четверг, 03.06.2021, 15:55 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
макрос-то покажете? Чтобы с нуля не начинать

Добрый день. Не смотрели?
 
Ответить
Сообщение
макрос-то покажете? Чтобы с нуля не начинать

Добрый день. Не смотрели?

Автор - Cere6ellum
Дата добавления - 03.06.2021 в 15:55
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Метод расчёта часов (Формулы/Formulas)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования Jobsora jooble
© 2010-2021 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!