Excel разница во времени и дате


Я хотел бы определить текущее время, начиная с указанной даты и времени.

Если указанные данные: 19/01/2013 16:44:00
а теперь пришло время: 19/01/2013 16:45:00

Разница составляет 0 лет 0 месяцев 0 дней 0 часов 1 минута 0 секунд

Это можно легко сделать, просто взяв текущее время и минус предыдущее время и отформатировав его, но это трудно сжать данные, поэтому я хочу разбить каждый сегмент даты / времени на свою собственную ячейку

Предположим, что ячейка A1 имеет предыдущую время и ячейка A2 имеет текущее время

Ячейки a5 и F5 будут содержать 0 лет 0 месяцев 0 дней 0 часов 1 минуту 0 секунд

На второй заметке по этому вопросу можно ли заставить =NOW() обновляться каждые x секунд через VBA без взаимодействия?

3 3

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