Просьба помочь решить несколько проблем касаемых подсчета времени. Условия: время до 21:00 имеет одну цену, после 21:00 дороже; время в ячейки В5 и С5 забивается вручную. Проблемы: 1) Как подсчитать количество времени, между ячейками В5 и С5. Я в своем макросе пошел по пути ветвления и нахождения количества времени путем вычитания. Может быть есть что-то наподобие DateDiff, только для времени - или это в данном случае не подойдет? 2) Результат получаемый моим методом - отображается в ячейках АА5 и АА6 листа "Заказы" - но даже там видно, что подсчет времени после полуночи идет неверный. 3) При попытке помножить время на цену за него в ячейке D5 получается не то, что нужно...
[vba]
Код
Sub РассчётЗаказа()
Const VECHER As Date = #9:00:00 PM#
If Range("C5") < VECHER Then Range("AA5") = FormatDateTime((Range("C5") - Range("B5")), vbShortTime) ElseIf Range("B5") > VECHER Then Range("AA6") = FormatDateTime((Range("C5") - Range("B5")), vbShortTime) ElseIf Range("B5") < VECHER And Range("C5") > VECHER Then Range("AA5") = FormatDateTime((VECHER - Range("B5")), vbShortTime) Range("AA6") = FormatDateTime((VECHER - Range("C5")), vbShortTime) End If
If Range("A4") = "Кабина №2" Or Range("A4") = "Кабина №3" Or Range("A4") = "Кабина №4" Then Range("D5") = (Sheets("Заказы").Range("AA5") * Sheets("ПрайсЛист").Range("B5") + Sheets("Заказы").Range("AA6") * Sheets("ПрайсЛист").Range("B6")) ElseIf Range("A4") = "VIP" Then Range("D5") = (Sheets("Заказы").Range("AA5") * Sheets("ПрайсЛист").Range("B3") + Sheets("Заказы").Range("AA6") * Sheets("ПрайсЛист").Range("B4")) End If
End Sub
[/vba]
Буду рад, если предложите свои варианты решения данной задачи.
По поводу моего кода - подозреваю, что он чересчур громоздкий и конструктивно неправильный, надеюсь услышать замечания и советы по улучшению техники написания.
Добрый день форумчане!
Просьба помочь решить несколько проблем касаемых подсчета времени. Условия: время до 21:00 имеет одну цену, после 21:00 дороже; время в ячейки В5 и С5 забивается вручную. Проблемы: 1) Как подсчитать количество времени, между ячейками В5 и С5. Я в своем макросе пошел по пути ветвления и нахождения количества времени путем вычитания. Может быть есть что-то наподобие DateDiff, только для времени - или это в данном случае не подойдет? 2) Результат получаемый моим методом - отображается в ячейках АА5 и АА6 листа "Заказы" - но даже там видно, что подсчет времени после полуночи идет неверный. 3) При попытке помножить время на цену за него в ячейке D5 получается не то, что нужно...
[vba]
Код
Sub РассчётЗаказа()
Const VECHER As Date = #9:00:00 PM#
If Range("C5") < VECHER Then Range("AA5") = FormatDateTime((Range("C5") - Range("B5")), vbShortTime) ElseIf Range("B5") > VECHER Then Range("AA6") = FormatDateTime((Range("C5") - Range("B5")), vbShortTime) ElseIf Range("B5") < VECHER And Range("C5") > VECHER Then Range("AA5") = FormatDateTime((VECHER - Range("B5")), vbShortTime) Range("AA6") = FormatDateTime((VECHER - Range("C5")), vbShortTime) End If
If Range("A4") = "Кабина №2" Or Range("A4") = "Кабина №3" Or Range("A4") = "Кабина №4" Then Range("D5") = (Sheets("Заказы").Range("AA5") * Sheets("ПрайсЛист").Range("B5") + Sheets("Заказы").Range("AA6") * Sheets("ПрайсЛист").Range("B6")) ElseIf Range("A4") = "VIP" Then Range("D5") = (Sheets("Заказы").Range("AA5") * Sheets("ПрайсЛист").Range("B3") + Sheets("Заказы").Range("AA6") * Sheets("ПрайсЛист").Range("B4")) End If
End Sub
[/vba]
Буду рад, если предложите свои варианты решения данной задачи.
По поводу моего кода - подозреваю, что он чересчур громоздкий и конструктивно неправильный, надеюсь услышать замечания и советы по улучшению техники написания.Railord
Хотелось бы избежать этого - ибо так придется делать раз по 30 на дню... Хотел минимизировать количество вбиваемых данных и максимально упростить этот файл... Просто я думаю, что я чего-то не знаю и пошел по неправильному пути. Может есть какой ни будь прием или функция о которой мне неизвестно.
Хотелось бы избежать этого - ибо так придется делать раз по 30 на дню... Хотел минимизировать количество вбиваемых данных и максимально упростить этот файл... Просто я думаю, что я чего-то не знаю и пошел по неправильному пути. Может есть какой ни будь прием или функция о которой мне неизвестно.Railord
Nil novi sub luna, так что - век живи, век учись!)
Сообщение отредактировал Railord - Вторник, 22.07.2014, 22:20
Благодарю _Boroda_, . Сработало - только я не понял, каким образом происходит вычитание из неравенства, если не сложно поясните пожалуйста, так сказать на пальцах, словами...
Теперь осталось решить проблему 3-го пункта - чтобы при умножении, к примеру 4 часов 30 минут на 200 получалось 900, а не непонятно что...
Есть мысль переводить часы в минуты, вот только средствами чего это можно реализовать в VBA? Хотя проблемы это наверное все равно не решит, при умножении времени на число, получается какае-то ерунда...
Благодарю _Boroda_, . Сработало - только я не понял, каким образом происходит вычитание из неравенства, если не сложно поясните пожалуйста, так сказать на пальцах, словами...
Теперь осталось решить проблему 3-го пункта - чтобы при умножении, к примеру 4 часов 30 минут на 200 получалось 900, а не непонятно что...
Есть мысль переводить часы в минуты, вот только средствами чего это можно реализовать в VBA? Хотя проблемы это наверное все равно не решит, при умножении времени на число, получается какае-то ерунда...Railord
Nil novi sub luna, так что - век живи, век учись!)
1. кусок (Range("C5") < Range("B5")) дает ИСТИНА или ЛОЖЬ. В VBA ИСТИНА - это минус 1, ЛОЖЬ - 0. Единица в формате Excel и VBA - это одни сутки. поэтому формулу можно интерпретировать так: А-Б плюс одни сутки, если А меньше Б (то есть, А и Б находятся в разных днях) 3. 4ч 30мин - это вовсе не 4,5 (см. п.1 - "Единица в формате Excel и VBA - это одни сутки"). Следовательно, нужно делать так: 4:30*24*200, где 24 - это кол-во часов в сутках.
1. кусок (Range("C5") < Range("B5")) дает ИСТИНА или ЛОЖЬ. В VBA ИСТИНА - это минус 1, ЛОЖЬ - 0. Единица в формате Excel и VBA - это одни сутки. поэтому формулу можно интерпретировать так: А-Б плюс одни сутки, если А меньше Б (то есть, А и Б находятся в разных днях) 3. 4ч 30мин - это вовсе не 4,5 (см. п.1 - "Единица в формате Excel и VBA - это одни сутки"). Следовательно, нужно делать так: 4:30*24*200, где 24 - это кол-во часов в сутках._Boroda_
Понятно - благодарю за разъяснения. Сам ни за чтобы не догнал... Вроде бы и книгу прочел(Стивен Роман "Использование макросов в ексель"), но такого там не видел...
Если перемножить 4,3*24*200 получается огромное число... Не понял, исходя из пункта 1 получается, что 4:30 - эксель видит как четверо суток с лишним?
Понятно - благодарю за разъяснения. Сам ни за чтобы не догнал... Вроде бы и книгу прочел(Стивен Роман "Использование макросов в ексель"), но такого там не видел...
Если перемножить 4,3*24*200 получается огромное число... Не понял, исходя из пункта 1 получается, что 4:30 - эксель видит как четверо суток с лишним?Railord
Nil novi sub luna, так что - век живи, век учись!)