Как сложить ячейки с временем?
Формат в ячейках такой: часы:минуты:секунды:кадры. Кадры остаются без изменений.
Например нужно к 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 два последних символа.
Спасибо! То что нужно!
А можно чтобы исходные данные заменились на расчетные?
Взять каждую ячейку, прибавить к ней 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