
У меня есть документ, который является расшифровкой видеоинтервью. Само видео имеет встроенный таймкод SMPTE, а также встроенный таймкод (BITC). Таймкод SMPTE и BITC соответствуют времени суток, когда снималось интервью, в 24-часовом формате.
В документе транскрипции есть временные метки в квадратных скобках каждые две минуты, в [hh:mm]
формате. Однако эти временные метки транскрипции начинаются с '00:00'.
Есть ли способ использовать своего рода функцию «Поиск и замена», чтобы пройтись по документу, найти все вхождения hh:mm
и добавить фиксированное время к этим временным меткам, тем самым отражая время суток, совпадающее с временным кодом SMPTE?
Идеальным решением был бы инструмент, который:
- Находит все временные метки в
[hh:mm]
формате - Добавляет время начала интервью «yy:yy» в 24-часовом формате ко всем исходным временным меткам «xx:xx».
- Заменяет временные метки новой, исправленной временной меткой «zz:zz», которая будет равна xx:xx+yy:yy.
Так, например, если мое интервью началось в 9:30 утра, каждая временная метка будет заменена следующим образом:
- 00:00 + 9:30 = 9:30
- 00:02 + 9:30 = 9:32
- 00:04 + 9:30 = 9:34
- И т. д.
решение1
Я сомневаюсь, что это лучший способ сделать это, но вот одно решение. Очевидно, что оно не очень отшлифовано, так как я не уверен, как вы будете вставлять приращение времени или данные представляют собой просто абзац в одной ячейке, но это должно помочь вам в большинстве случаев.
Он разбивает значение активной ячейки на массив, ища «[», затем корректирует первые 2 символа с шагом в час, а символы 4 и 5 — с шагом в минуту, а затем собирает все обратно.
Это также работает и с активной ячейкой, что не является хорошей практикой кодирования.
Sub update_times()
Dim sParts() As String
Dim input_text As String
Dim output_text As String
Dim split_on As String
Dim hours_add As Integer
Dim minutes_add As Integer
Dim hours_final As Integer
Dim minutes_final As Integer
split_on = "["
hours_add = 9
minutes_add = 30
input_text = ActiveCell.Value
sParts = Split(input_text, split_on)
output_text = sParts(0)
For i = 1 To UBound(sParts)
hours_final = Left(sParts(i), 2) + hours_add
minutes_final = Mid(sParts(i), 4, 2) + minutes_add
'checks to wrap data
If minutes_final > 59 Then
hours_final = hours_final + 1
minutes_final = minutes_final - 60
End If
If hours_final > 23 Then
hours_final = hours_final - 24
End If
'put the part back together with the new hour and minutes
sParts(i) = "[" & Format(hours_final, "00") & ":" & Format(minutes_final, "00") & Right(sParts(i), Len(sParts(i)) - 5)
'add the part to the final string
output_text = output_text & sParts(i)
Next
ActiveCell.Value = output_text
End Sub