Расчет ТВ-времени (Microsoft Excel)
Джон работает в телеиндустрии, где синхронизация выполняется с разрешением менее секунды. Телевизионное видео должно учитывать часы, минуты, секунды и кадры. (Есть тридцать кадров в секунду.) Джону было интересно, есть ли способ обрабатывать кадры в 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 [Расчет ТВ-времени]
.