Excel: Сложение времени, которое имеет нестандартный вид.

Автор wvlas, 28 февраля 2019, 10:31

wvlas

Как сложить ячейки с временем?
Формат в ячейках такой: часы:минуты:секунды:кадры. Кадры остаются без изменений.

Например нужно к 07:59:56:03 прибавить 00:00:06:00 чтобы получилось 08:00:02:03.

07:59:56:03 это исходные данные в таблице, их менять нельзя.

[вложение удалено администратором]

Администратор

Я в формуле сделал отступы для удобства чтения формулы; можете удалить отступы.

=ТЕКСТ(
    ТЕКСТ(ЛЕВСИМВ(B3;ДЛСТР(B3)-2);"00\:00\:00") + ТЕКСТ(ЛЕВСИМВ(C3;ДЛСТР(C3)-2);"00\:00\:00");
    "[чч]:мм:сс")
& ":" & ПРАВСИМВ(B3;2)

ПОЯСНЕНИЯ К ФОРМУЛЕ


1. ТЕКСТ(ЛЕВСИМВ(B3;ДЛСТР(B3)-2);"00\:00\:00")

ЛЕВСИМВ(B3;ДЛСТР(B3)-2
Извлекает из ячейки B3 текст без двух последних символов.

ТЕКСТ преобразует число 75956 в текст: 07:59:56. Перед двоеточием ставится слеш, потому что двоеточие является специальным символом. Чтобы двоеточие воспринялось экселем как просто текст ':', подставляется слеш.

2. ТЕКСТ(ЛЕВСИМВ(C3;ДЛСТР(C3)-2);"00\:00\:00")

То же, что в пункте 1, но обрабатывается ячейка 'C3'.

3. Получается два времени и они складываются.

4. Время в формуле находится в виде числа. Чтобы получить время в виде времени используется ТЕКСТ с параметром [чч]:мм:сс. Этот параметр преобразует число во время. У [чч] квадратные скобки на случай, если количество часов будет больше 23, чтобы отобразилось 24 и т.д. Если квадратные скобки не использовать, то количество часов не будет больше 23.

5. ПРАВСИМВ(B3;2)

ПРАВСИМВ извлекает из B3 два последних символа.
[свернуть]

wvlas

Спасибо! То что нужно!

А можно чтобы исходные данные заменились на расчетные?
Взять каждую ячейку, прибавить к ней 00:00:06:0 и заменить тем, что получилось.

[вложение удалено администратором]

Администратор

Макрос
Sub Макрос()
   
    Dim arr(), src, h, m, s
    Dim lr As Long, i As Long
   
   
    '1. Поиск последней строки в столбце B.
        ' End не ищет в скрытых строках.
    lr = Cells(Rows.Count, "B").End(xlUp).row
   
    '2. Копирование данных в vba-массив:
        '1) чтобы ускорить макрос;
        '2) может быть будет удобнее читать код.
    arr() = Range("B1:B" & lr).Value
   
    '3. Обработка данных в массиве.
    For i = 1 To UBound(arr)
       
        '1) Копирование данных из массива в переменную для удобства чтения кода.
        src = arr(i, 1)
        '2) Преобразуем число в вид: 00:00:00:00.
            ' В массив числа запишутся в том виде, как юзер видит числа в строке формул.
        src = Format(src, "00:00:00:00")
        '3) Разбивка данных на часы, минуты, секунды и кадры.
        src = Split(src, ":")
        '4) Копирование данных из переменной 'src' в другие переменные, чтобы удобнее читать код.
        h = src(0): m = src(1): s = src(2)
       
        '5) Прибавление шести секунд к секундам и преобразование часов и минут,
            ' если количество минут и секунд станет больше 60.
        s = s + 6
        m = m + Fix(s / 60)
        h = h + Fix(m / 60)
        m = m Mod 60
        s = s Mod 60
       
        '6) Добавление впереди нулей, чтобы в числе было две цифры.
        h = Format(h, "00")
        m = Format(m, "00")
        s = Format(s, "00")
       
        '7) Запись данных обратно в массив.
        arr(i, 1) = h & ":" & m & ":" & s & ":" & src(3)
       
    Next i
   
    '4. Вставка изменённых данных на лист.
    Range("B1").Resize(UBound(arr)).Value = arr()
   
    '5. Сообщение.
    MsgBox "Готово.", vbInformation

End Sub
[свернуть]