Страницы: 1 2 След.
RSS
Расчет стоимости часов исходя из месяца
 
Добрый день! Коллеги!
нужна помощь в создании универсальной формулы для подсчета стоимости
например есть начальная дата в формате А1 = 1.01.2019 20:59:59 и конечная В1= 05.02.2019 09:59:00 надо определить стоимость промежутка времени, при этом стоимость 1 сек, двух разных месяцев разная в связи с количеством дней в месяце. (Месяц например С1= 500₽) как сделать чтобы формула сама Высчитывала часть времени месяца по цене исходя из количества дней месяца  
 
Добрый и Вам. Фалй пример ускорит помощь.
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
вот файл, не знаю правильно ли я написала..
Изменено: eva243 - 30.11.2019 22:20:03
 
eva243, ну если всегда два месяца, то
=(EOMONTH(E2;0)+1-E2)*H2/DAY(EOMONTH(E2;0))
и
=(F2-EOMONTH(F2;-1)+1)*H2/DAY(EOMONTH(F2;0))
По вопросам из тем форума, личку не читаю.
 
eva243,
А месяц окончания всегда следующий месяц после начала?
В восьмой строке примера Общее время перерыва у вас 191:04:00
а у меня получилось 88:34:00
 
Код
=RC8*ЕСЛИ(МЕСЯЦ(RC5)=МЕСЯЦ(RC6);1;((R1C[1]-RC5)/(RC6-RC5)))
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
БМВ написал: ...если всегда два месяца...
Может быть и один месяц. Как то считает не так. Получается, расчет за время примерно такой. 30 д в сентябре /500  = 16,67(24 часа)  а если в октябре то там 31д/500 и уже будет 16,12 (24ч). На первой строчке в сентябре 2д и 11ч а в октябре 8 часов.  
 
Цитата
eva243 написал:
30 д в сентябре /500
получаем не почем день а сколько времени за рубль. Что считать то хотите?
По вопросам из тем форума, личку не читаю.
 
времени за рубль, сложность именно в том, что там два месяца и считаются они по разной цене. (из за месяца)  
 
БМВ,
Я думаю, что ТС нужно 500 руб раскидать по месяцам пропорционально времени
 
Цитата
eva243,  написал:
времени за рубль,
тогда руками покажите расчет по одной строке. А то что-то  не вяжется.
Изменено: БМВ - 01.12.2019 22:24:00
По вопросам из тем форума, личку не читаю.
 
БМВ,
Я не писал
Цитата
времени за рубль,
Пошли уже третьи сутки, а воз и ныне там. ТС опять ушел в кусты.
Изменено: Kuzmich - 01.12.2019 22:01:41
 
Рубль ищет )
 
Цитата
eva243 написал:
Может быть и один месяц
см. сообщение #6, считает и за один месяц (за сентябрь)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Смотрите, есть промежуток времени, пример: 28 сентяря 18:40:00  - 1 октября 09:00:00. Надо что бы формула высчитывала время до конца месяца. Потом это время ,она умножает на стоимость, например на 500/28 .... или 31 (сентябрь или октябрь или другой), при этом, если 28д в месяце, сутки будут стоить =17,85  час = 0,744 , минута 0,012. Т.е. она высчитывает стоимость до минут в одном, потом во втором месяце, и эту сумму складывает.
 
Ну №4 этим и занимается, разве что не складывает.
По вопросам из тем форума, личку не читаю.
 
так, вроде понял о чем речь
Изменено: Ігор Гончаренко - 02.12.2019 09:12:46
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Да в сентябре правильно посчитано, а в октябре нет. в октябре должно быть 5.48 (за 8:09 минут)
42,795,48
 
Но может быть такое что начало октябрь и конец октябрь
 
Вот такой ручной режим, а хотелось бы что бы система сама понимала сколько д. в месяце и все это высчитывала
 
а это вы о чем?
5.48 за 8ч.9м. если начала пишете:
Цитата
eva243 написал:
есть промежуток времени, пример: 28 сентяря 18:40:00  - 1 октября 09:00:00
от куда вдруг 8ч.9мин. если в примере 9 часов и цена какая??? для этого примера и что должно получиться в итоге?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
от куда вдруг 8ч.9мин. если в примере 9 часов и цена какая??? для этого примера и что должно получиться в итоге?
5.48 (за 8:09 минут) это из файла, №4 А до этого был другой пример.  
 
сентябрь:
Код
=(МИН(J$1;F2)-E2)*H2/(J$1-I$1)
октябрь
Код
=(МАКС(F2;J$1)-J$1)*H2/(K$1-J$1)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
сентябрь: Код ? 1=(МИН(J$1;F2)-E2)*H2/(J$1-I$1)октябрьКод ? 1=(МАКС(F2;J$1)-J$1)*H2/(K$1-J$1)
Если будет один месяц, то не считает как надо.  
 
Для вашего примера из сообщения #20, макрос в стандартный модуль, попробуйте
Код
Sub Raschet()
Dim i As Long
Dim iLastRow As Long
Dim FirstDay As Date                   'первый день месяца
Dim EndDay As Date                     'последний день месяца
Dim BeginDate As Date                  'дата начала
Dim EndDate As Date                    'дата окончания
Dim DoKontsa As Double                 'от даты начала до конца месяца
Dim OtNachala As Double                'от начала месяца до даты окончания
Dim iSumma As Double
Dim KolDaysBegin As Integer            'кол-во дней в месяце начала
Dim KolDaysEnd As Integer              'кол-во дней в месяце окончания

  iLastRow = Cells(Rows.Count, "E").End(xlUp).Row
  Range("K3:L" & iLastRow).ClearContents
  Range("N3:P" & iLastRow).ClearContents
For i = 3 To iLastRow
  BeginDate = Cells(i, "E")            'время начала
    EndDate = Cells(i, "F")            'время окончания
    KolDaysBegin = Day(DateSerial(Year(BeginDate), Month(BeginDate) + 1, 1) - 1)
    KolDaysEnd = Day(DateSerial(Year(EndDate), Month(EndDate) + 1, 1) - 1)
  If Month(EndDate) - Month(BeginDate) = 1 Then
    EndDay = DateSerial(Year(BeginDate), Month(BeginDate) + 1, 1) 'последний день месяца начала
    DoKontsa = EndDay - BeginDate
    FirstDay = DateSerial(Year(EndDate), Month(EndDate), 1)      'первый день месяца конца
    OtNachala = EndDate - FirstDay
      iSumma = DoKontsa + OtNachala
  Else
    If Month(EndDate) = Month(BeginDate) Then
      If Month(BeginDate) = Month(Range("N2")) Then
         OtNachala = 0
         DoKontsa = EndDate - BeginDate
      End If
      If Month(BeginDate) = Month(Range("O2")) Then
         OtNachala = EndDate - BeginDate
         DoKontsa = 0
      End If
      iSumma = EndDate - BeginDate
    End If
  End If
      Cells(i, "K") = DoKontsa
      Cells(i, "L") = OtNachala
      Cells(i, "N") = Cells(i, "M") / KolDaysBegin * DoKontsa
      Cells(i, "O") = Cells(i, "M") / KolDaysEnd * OtNachala
      Cells(i, "P") = iSumma
Next
End Sub
 
Ошибка "Run-time errror "13": type mismatch
Аа это где нет цены. Вроде работает)
Подскажите, а если будут другие месяца или если их будет три, например с 11.09.19 - 12.12.2019, будет ли работать и что нужно менять?
Изменено: eva243 - 02.12.2019 11:55:44
 
Цитата
если их будет три
Надо корректировать макрос
 
Надо корректировать макрос

Спасибо! Хороший вариант, если будет два месяца буду вашим пользоваться))  
 
Цитата
если будет два месяца буду вашим пользоваться
Так и для одного месяца тоже подходит
 
Для коллекции
А еще есть хорошая функция КОНМЕСЯЦА, которая умеет точно вычислять границу между месяцами, отстоящими от заданной даты на заданное ЦЕЛОЕ число месяцев. Мне кажется, что она может оказаться полезной в подобных вычислениях.
Страницы: 1 2 След.
Наверх