Страницы: 1
RSS
VBA. Высчитывать, сколько прошло времени в минутах
 
Добрый день,

В двух макросах у меня такой код:
Код
Range("Z9") = DatePart("h", Time) & ":" & DatePart("n", Time)

Код
Range("Z10") = DatePart("h", Time) & ":" & DatePart("n", Time)
Cells(11, "Z") = DateDiff("n", Cells(9, "Z"), Cells(10, "Z"))

Все работает хорошо в пределах одного дня. Но если первое значение Z9 внесено в один день, а Z10 – в другой, подсчет в Z11 проходит неправильно.
Как это можно исправить?
Нужно высчитывать, сколько прошло минут между двумя макросами.
 
Пример - это пример в Excel, а не картинка.
 
а что вы хотите?
второй цикл пошел в обратном направлении по времени с 23:06 до 15:07 за это время прошло -479 минут
все сходится, что не так?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
А должно было быть 15:07-23:06=961 минута так как наступил следущий день.
Возможно, можно добавить условие, что если Z10<Z9 тогда Z10+24:00, как-то так. Но лучше добавить запись дат в ячейки Z10 и Z9, так как может быть случай, когда Z10>Z9, но это уже следующий день.
 
а с чего это видно, что на следующий день? видно 23:06 и 15:07, а через сколько дней 15:07 - не известно!
может через 3 дня, через 10, 100 дней?
каждый раз минут будет совсем другое количество
работайте с датами и будет вам счастье, а пока в данных ерунда будет головняк - а сколько же дней прошло?
вот между 17.01.2022 23:06 и 18.01.2022 15:07 - действительно 961 минута и вычислить это, как два байта отослать

т.е. код редактировать не нужно. нужно использовать правильные данные, а код - переписать под них
собственно весь код =(КонечноеВремя-Начальное)*1440 - это и есть количество минут между двумя моментами времени.
Изменено: Ігор Гончаренко - 17.01.2022 22:51:48
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
У меня раньше циклы были в течение дня, но сейчас увеличиваются.

Вы можете отправить код, который будет так работать?
 
могу:
в А1 пишете 17.01.2022 23:06, в А2 пишете 18.01.2022 15:07
выполняете этот правильный код
Код
Sub bb()
  MsgBox Round(([a2] - [a1]) * 1440, 0)
End Sub
и увидите результат
Изменено: Ігор Гончаренко - 17.01.2022 23:34:28
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Решил задачу таким образом:
Код
Dim d As Integer
d = DateDiff("d", Cells(10, "D"), Now)
Range("Z10") = DatePart("h", Time) & ":" & DatePart("n", Time)
If Range("Z10") < Range("Z9") Or Range("D9") < Date Then
Cells(11, "Z") = DateDiff("n", Cells(9, "Z"), Cells(10, "Z")) + d * 1440
Else
Cells(11, "Z") = DateDiff("n", Cells(9, "Z"), Cells(10, "Z"))
End If
Страницы: 1
Наверх