John arbeitet in der TV-Branche, wo das Timing auf eine Auflösung von weniger als einer Sekunde eingestellt wird. Fernsehvideos müssen Stunden, Minuten, Sekunden und Bilder berücksichtigen. (Es gibt dreißig Bilder pro Sekunde.) John fragte sich, ob es eine Möglichkeit gibt, Bilder in Excel zu verarbeiten.

Es gibt keine Möglichkeit, Frames als Teil der nativen Zeitwerte in Excel zu behandeln. (In der Fernsehbranche wird ein Zeitwert, der Frames enthält, häufig als „Timecode“ oder „Timecode“ bezeichnet.) Es gibt jedoch einige Möglichkeiten, mit Frames zu arbeiten. Der vielleicht naheliegendste Vorschlag ist, Stunden, Minuten und Sekunden als regulären Zeitwert beizubehalten und dann Frames in einer separaten Zelle abzulegen. Der unmittelbare Nachteil dieses Ansatzes besteht darin, dass Berechnungen für die „TV-Zeiten“ nicht so einfach sind, wie sie wären, wenn sie in einem einzigen Wert dargestellt würden.

Eine Möglichkeit, dies zu umgehen, besteht darin, zu versuchen, Ihre eigenen Berechnungen in einem Makro durchzuführen.

Excel durchläuft einen internen Prozess zum Konvertieren von Zeiten in Dezimalwerte, mit denen sehr einfach gearbeitet werden kann. Sie können denselben Konvertierungsprozess simulieren, indem Sie einen Zeitwert (einschließlich Frames) in einen Dezimalwert konvertieren. Die TV-Zeit im Format 00: 29: 10: 10 könnte in einer Zelle gespeichert werden (in der Excel sie als Zeichenfolge behandelt) und dann vom Makro in einen Wert konvertiert werden.

Hier gibt es natürlich ein Problem: Sie können die Zeit nicht wie Excel für Zeiten in einen echten Dezimalwert zwischen 0 und 1 konvertieren. Der Grund liegt in den Einschränkungen der signifikanten Ziffern von Excel. Um einen Wert zu erhalten, teilen Sie die Stunden durch 24, die Minuten durch 1440 (24 60), die Sekunden durch 86400 (24 60 60) und die Frames durch 2592000 (24 60 60 30), vorausgesetzt, Sie arbeiten mit 30 Frames pro Sekunde). Wenn Sie anfangen, auf so kleine Werte zu kommen, überschreitet dies die Grenzen von Excel, alles auf fünfzehn signifikante Stellen zu halten. Somit kommt es zu unvermeidbaren Rundungsfehlern beim Frame-Wert.

Eine Lösung für dieses Problem besteht darin, nicht zu versuchen, mit Dezimalwerten zwischen 0 und 1 zu arbeiten, sondern mit ganzen Zahlen. Wenn Sie die Zeichenfolgenzeit in einen ganzzahligen Wert konvertieren, der die Anzahl der gesamten Frames in der Zeit darstellt, können Sie den resultierenden Wert problemlos berechnen.

Das folgende Makro konvertiert eine Zeichenfolge in das bereits erwähnte Format:

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 FrameRate As Integer     Dim T2D As Long

' Change the following to the number of frames     ' per second with which you are working     FrameRate = 30

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 * FrameRate + NumFrames

Time2Num = T2D End Function

Wenn Sie eine Zeichenfolge wie 37: 15: 42: 06 in Zelle A4 haben und die Formel = Time2Num (A4) verwenden, um zu sehen, wie dies funktioniert, ist das Ergebnis der Wert 4024266, dh die Anzahl der Frames in 37 Stunden, 15 Minuten, 42 Sekunden und 6 Bilder. Um solche Werte wieder in eine verständliche Zeit umzuwandeln, können Sie die folgende Funktion verwenden:

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

' Change the following to the number of frames     ' per second with which you are working     FrameRate = 30

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

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



NumMinutes = RemainingTime \ (60 * FrameRate)

RemainingTime = RemainingTime Mod (60 * FrameRate)



NumSeconds = RemainingTime \ FrameRate     RemainingTime = RemainingTime Mod FrameRate

NumFrames = RemainingTime

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

End Function

Durch Kombinieren der beiden Funktionen können Sie mit der Zeit rechnen. Angenommen, Sie hatten die Zeit 00: 29: 10: 10 in Zelle A4 und die Zeit 00: 16: 12: 23 in Zelle A5. Wenn Sie die folgende Formel in eine Zelle einfügen, können Sie den Unterschied zwischen den beiden Zeiten herausfinden:

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

Das Ergebnis ist 00: 12: 57: 17.

Die hier vorgestellten Beispiele sind rudimentär; Sie berücksichtigen keine Fehlerbehandlung oder Begrenzungsprüfung der verwendeten Zeiten. Sie können die Beispiele entweder entsprechend Ihren Anforderungen erweitern oder sich an eine Quelle eines Drittanbieters wenden. Eine Erklärung (mit einer Beispielarbeitsmappe) für NTSC- und PAL-Zeiten finden Sie beispielsweise unter der folgenden URL:

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

Es gibt auch andere makrobasierte Lösungen im Internet.

Der beste Ansatz ist, Ihre bevorzugte Suchmaschine zu verwenden und nach „Timecode Excel“ oder „Time Code Excel“ (ohne Anführungszeichen) zu suchen. Sie finden viele Beispiele für Code, mit denen Sie beginnen können.

_Hinweis: _

Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.

ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.

Dieser Tipp (8353) gilt für Microsoft Excel 2007, 2010, 2013, 2016, 2019 und Excel in Office 365. Eine Version dieses Tippes für die ältere Menüoberfläche von Excel finden Sie hier: