Excel разница во времени и дате
Я хотел бы определить текущее время, начиная с указанной даты и времени.
Если указанные данные: 19/01/2013 16:44:00
а теперь пришло время: 19/01/2013 16:45:00
Это можно легко сделать, просто взяв текущее время и минус предыдущее время и отформатировав его, но это трудно сжать данные, поэтому я хочу разбить каждый сегмент даты / времени на свою собственную ячейку
Предположим, что ячейка A1 имеет предыдущую время и ячейка A2 имеет текущее время
Ячейки a5 и F5 будут содержать 0 лет 0 месяцев 0 дней 0 часов 1 минуту 0 секунд
На второй заметке по этому вопросу можно ли заставить =NOW()
обновляться каждые x секунд через VBA без взаимодействия?
3 ответа:
Вы не можете использовать функцию
YEAR
для получения разницы в годах, потому что это даст 1 год между 31 декабря 2012 года и 1 января 2013 года, когда есть только один день.........точно так же у вас могут возникнуть проблемы с месяцем и днем (например, месяц всегда возвращает число между 1 и 12, тогда как в этом контексте вы ожидали бы только числа между 0 и 11)
Попробуйте
DATEDIF
для первых 3, тоHOUR
,MINUTE
,SECOND
как предлагает ЮстинПредполагая дату начала/время в A2 и конец дата/время в B2 попробуйте использовать эти формулы соответственно для лет, месяцев, дней, часов, минут и секунд
=DATEDIF(A2,B2-(MOD(A2,1)>MOD(B2,1)),"y")
=DATEDIF(A2,B2-(MOD(A2,1)>MOD(B2,1)),"ym")
=DATEDIF(A2,B2-(MOD(A2,1)>MOD(B2,1)),"md")
=HOUR(B2-A2)
=MINUTE(B2-A2)
=SECOND(B2-A2)
Форматировать все ячейки как общие
Вы можете получить некоторые расхождения из-за переменной длины месяца/года......
Используйте
A5 = Year(A1)-Year(A2)
и т. д.Используя
Year(...)
Month(...)
Day(...)
Hour(...)
Minute(...)
Second(...)
Для получения более подробной информации о создании самообновляющегося листа на основе таймера, посмотрите на эти два сообщения и установите таймер для выполнения метода
Worksheet.Calculate
.
Private Sub CommandButton1_Click() DoDateA End Sub Sub DoDateA() Dim D1 As Date, D2 As Date, DC As Date, DS As Date Dim CA: CA = Array("", "yyyy", "m", "d", "h", "n", "s", "s") Dim Va%(7), Da(7) As Date, Ci% D1 = Now + Rnd() * 420 ' vary the * factors for range of dates D2 = Now + Rnd() * 156 If D1 > D2 Then [b4] = "Larger" Else [b4] = " smaller" DS = D1 D1 = D2 D2 = DS End If [d4] = D1 [e4] = D2 DC = D2 For Ci = 1 To 6 Va(Ci) = DateDiff(CA(Ci), DC, D1) DC = DateAdd(CA(Ci), Va(Ci), DC) Va(Ci + 1) = DateDiff(CA(Ci + 1), DC, D1) If Va(Ci + 1) < 0 Then ' added too much Va(Ci) = Va(Ci) - 1 DC = DateAdd(CA(Ci), -1, DC) Cells(9, Ci + 3) = Va(Ci + 1) Cells(8, Ci + 3) = Format(DC, "yyyy:mm:dd hh:mm:ss") End If Da(Ci) = DC Cells(5, Ci + 3) = CA(Ci) Cells(6, Ci + 3) = Va(Ci) Cells(7, Ci + 3) = Format(Da(Ci), "yyyy:mm:dd hh:mm:ss") Cells(10, Ci + 3) = DateDiff(CA(Ci), D2, D1) Next Ci End Sub