John trabaja en la industria de la televisión, donde la sincronización se realiza con una resolución más fina que un segundo. El video de televisión debe tener en cuenta horas, minutos, segundos y fotogramas. (Hay treinta fotogramas por segundo). John se preguntaba si había alguna forma de manejar los fotogramas en Excel.

No hay forma de manejar marcos como parte de los valores de tiempo nativos en Excel. Sin embargo, hay un par de cosas que puede hacer para trabajar con marcos. Quizás la sugerencia más obvia es mantener las horas, los minutos y los segundos como un valor de tiempo regular y luego colocar los fotogramas en una celda separada. El inconveniente inmediato de este enfoque es que los cálculos de los «tiempos de TV» no son tan fáciles como lo serían si estuvieran representados en un solo valor.

Una forma de evitar esto es intentar hacer sus propios cálculos en una macro.

Excel pasa por un proceso interno de conversión de tiempos a valores decimales con el que se puede trabajar muy fácilmente. Puede simular este mismo proceso de conversión, convirtiendo un valor de tiempo (incluidos los fotogramas) en un valor decimal. La hora de TV, en el formato 00: 29: 10: 10, podría almacenarse en una celda (donde Excel la tratará como una cadena) y luego la macro la convertiría en un valor.

Hay un problema aquí, por supuesto: no puede convertir el tiempo a un valor decimal verdadero entre 0 y 1 como lo hace Excel para los tiempos. La razón tiene que ver con los límites de los dígitos significativos de Excel. Para llegar a un valor, dividiría las horas por 24, los minutos por 1440 (24 60), los segundos por 86400 (24 60 60) y los fotogramas por 2592000 (24 60 60 30). Cuando comienza a obtener valores tan pequeños, excede los límites de Excel de mantener todo en quince dígitos significativos.

Por lo tanto, termina con inevitables errores de redondeo en el valor de los fotogramas.

Una solución a este problema es no intentar trabajar con valores decimales entre 0 y 1, sino trabajar con números enteros. Si convierte el tiempo de la cadena en un valor entero que representa el número total de fotogramas en el tiempo, puede hacer cálculos matemáticos fácilmente con el valor resultante.

La siguiente macro hará la conversión de una cadena en el formato ya mencionado:

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

Para ver cómo funciona esto, si tiene una cadena como 37: 15: 42: 06 en la celda A4 y usa la fórmula = Time2Num (A4), el resultado es el valor 4024266, que es el número de fotogramas en 37 horas, 15 minutos, 42 segundos y 6 fotogramas. Para convertir dichos valores de nuevo a un tiempo comprensible, puede utilizar la siguiente función:

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

Combinando las dos funciones, puedes hacer algunos cálculos matemáticos con los tiempos. Por ejemplo, suponga que tiene la hora 00: 29: 10: 10 en la celda A4 y la hora 00: 16: 12: 23 en la celda A5. Si pones la siguiente fórmula en una celda, puedes encontrar la diferencia entre los dos tiempos:

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

El resultado es 00: 12: 57: 17.

Los ejemplos presentados aquí son rudimentarios; no tienen en cuenta el manejo de errores ni limitan la verificación de los tiempos utilizados. Puede ampliar los ejemplos para que se ajusten a sus necesidades o puede buscar una fuente de terceros. Por ejemplo, puede encontrar una explicación (con un libro de trabajo de muestra) para los tiempos NTSC y PAL en la siguiente URL:

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

_Nota: _

Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.

link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (3100) se aplica a Microsoft Excel 97, 2000, 2002 y 2003. Puede encontrar una versión de este consejo para la interfaz de cinta de Excel (Excel 2007 y posterior) aquí:

link: / excelribbon-Calculating_TV_Time [Cálculo del tiempo de TV].