Джон работает в телеиндустрии, где синхронизация выполняется с разрешением менее секунды. Телевизионное видео должно учитывать часы, минуты, секунды и кадры. (Есть тридцать кадров в секунду.) Джону было интересно, есть ли способ обрабатывать кадры в Excel.

Нет возможности обрабатывать кадры как часть собственных значений времени в Excel. Однако есть несколько вещей, которые вы можете сделать для работы с фреймами. Возможно, наиболее очевидное предложение — сохранить часы, минуты и секунды как обычные значения времени, а затем поместить кадры в отдельную ячейку. Непосредственным недостатком этого подхода является то, что вычисление «времени просмотра ТВ» не так просто, как если бы они были представлены в виде одного значения.

Чтобы решить эту проблему, попробуйте выполнить свои собственные вычисления в макросе.

В Excel проходит внутренний процесс преобразования времени в десятичные значения, с которым очень легко работать. Вы можете смоделировать этот же процесс преобразования, преобразовав значение времени (включая кадры) в десятичное значение. Время ТВ в формате 00: 29: 10: 10 может быть сохранено в ячейке (где Excel будет рассматривать его как строку), а затем преобразовано в значение с помощью макроса.

Конечно, здесь есть проблема: вы не можете преобразовать время в истинное десятичное значение от 0 до 1, как это делает Excel для раз. Причина связана с ограничением значащих цифр Excel. Чтобы получить значение, вы должны разделить часы на 24, минуты на 1440 (24 60), секунды на 86400 (24 60 60) и кадры на 2592000 (24 60 60 30). Когда вы начинаете получать такие маленькие значения, это выходит за пределы ограничений Excel по поддержанию всего до пятнадцати значимых цифр.

Таким образом, вы получите неизбежные ошибки округления значения кадров.

Одно из решений этой проблемы — не пытаться работать с десятичными значениями от 0 до 1, а вместо этого работать с целыми числами. Если вы преобразуете строку time в целочисленное значение, представляющее общее количество кадров за время, вы легко сможете вычислить полученное значение.

Следующий макрос выполнит преобразование строки в уже упомянутый формат:

Function Time2Num(Raw) As Long     Dim FirstColon As Integer     Dim SecondColon As Integer     Dim ThirdColon As Integer     Dim NumHours As Integer     Dim NumMinutes As Integer     Dim NumSeconds As Integer     Dim NumFrames As Integer     Dim T2D As Long

Application.Volatile          FirstColon = InStr(Raw, ":")

SecondColon = InStr(FirstColon + 1, Raw, ":")

ThirdColon = InStr(SecondColon + 1, Raw, ":")



NumHours = Val(Mid(Raw, 1, FirstColon - 1))

NumMinutes = Val(Mid(Raw, FirstColon + 1, SecondColon - 1))

NumSeconds = Val(Mid(Raw, SecondColon + 1, ThirdColon - 1))

NumFrames = Val(Mid(Raw, ThirdColon + 1, Len(Raw)))



T2D = CLng(NumHours)

T2D = T2D  60 + NumMinutes     T2D = T2D  60 + NumSeconds     T2D = T2D * 30 + NumFrames

Time2Num = T2D End Function

Чтобы увидеть, как это работает, если у вас есть строка, например 37: 15: 42: 06 в ячейке A4, и вы используете формулу = Time2Num (A4), результатом будет значение 4024266, которое представляет собой количество кадров в 37 часов, 15 минут, 42 секунды и 6 кадров. Чтобы преобразовать такие значения обратно в понятное время, вы можете использовать следующую функцию:

Function Num2Time(Raw) As String     Dim NumHours As Integer     Dim NumMinutes As Integer     Dim NumSeconds As Integer     Dim NumFrames As Integer     Dim RemainingTime As Long

Application.Volatile

NumHours = Raw \ (CLng(30  60)  60)

RemainingTime = Raw Mod (CLng(30  60)  60)



NumMinutes = RemainingTime \ (60 * 30)

RemainingTime = RemainingTime Mod (60 * 30)



NumSeconds = RemainingTime \ 30     RemainingTime = RemainingTime Mod 30

NumFrames = RemainingTime

Num2Time = Format(NumHours, "00") & ":" & _       Format(NumMinutes, "00") & ":" & _       Format(NumSeconds, "00") & ":" & _       Format(NumFrames, "00")

End Function

Комбинируя две функции, вы можете вычислить время. Например, предположим, что у вас есть время 00: 29: 10: 10 в ячейке A4 и время 00: 16: 12: 23 в ячейке A5. Если вы поместите следующую формулу в ячейку, вы сможете узнать разницу между двумя значениями времени:

=Num2Time(Time2Num(A4)-Time2Num(A5))

Результат 00: 12: 57: 17.

Представленные здесь примеры являются элементарными; они не принимают во внимание обработку ошибок или проверку ограничений по используемому времени. Вы можете расширить примеры в соответствии со своими потребностями или обратиться к стороннему источнику. Например, вы можете найти объяснение (с образцом рабочей книги) для времени NTSC и PAL по следующему URL-адресу:

http://www.kenstone.net/fcp_homepage/timecode_spreadsheet.html

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (3100) применим к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и новее) здесь:

link: / excelribbon-Calculating_TV_Time [Расчет ТВ-времени].