John lavora nel settore televisivo, dove il tempismo è fatto con una risoluzione più fine di un secondo. Il video televisivo deve tenere conto di ore, minuti, secondi e fotogrammi. (Ci sono trenta frame al secondo.) John si chiedeva se ci fosse un modo per gestire i frame in Excel.

Non è possibile gestire i frame come parte dei valori temporali nativi in ​​Excel. Tuttavia, ci sono un paio di cose che puoi fare per lavorare con i frame. Forse il suggerimento più ovvio è quello di mantenere ore, minuti e secondi come un valore di tempo regolare, quindi inserire i frame in una cella separata. Lo svantaggio immediato di questo approccio è che i calcoli per i “tempi TV” non sono così facili come sarebbero se fossero rappresentati in un unico valore.

Un modo per aggirare questo è provare a fare i tuoi calcoli in una macro.

Excel passa attraverso un processo interno di conversione dei tempi in valori decimali che possono essere utilizzati molto facilmente. È possibile simulare lo stesso processo di conversione, convertendo un valore temporale (inclusi i frame) in un valore decimale. L’ora della TV, nel formato 00: 29: 10: 10, potrebbe essere memorizzata in una cella (dove Excel la tratterà come una stringa) e quindi convertita in un valore dalla macro.

C’è un problema qui, ovviamente: non puoi convertire l’ora in un vero valore decimale compreso tra 0 e 1 come fa Excel per i tempi. Il motivo ha a che fare con i limiti delle cifre significative di Excel. Per arrivare a un valore, dividere le ore per 24, i minuti per 1440 (24 60), i secondi per 86400 (24 60 60) e i fotogrammi per 2592000 (24 60 60 30). Quando inizi a entrare in valori così piccoli, supera i limiti di Excel di mantenere tutto a quindici cifre significative.

Pertanto, si finisce con errori di arrotondamento inevitabili sul valore dei frame.

Una soluzione a questo problema è non provare a lavorare con valori decimali compresi tra 0 e 1, ma lavorare invece con numeri interi. Se converti il ​​tempo della stringa in un valore intero che rappresenta il numero di fotogrammi totali nel tempo, puoi facilmente eseguire calcoli sul valore risultante.

La seguente macro eseguirà la conversione di una stringa nel formato già menzionato:

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

Per vedere come funziona, se hai una stringa come 37: 15: 42: 06 nella cella A4 e usi la formula = Time2Num (A4), il risultato è il valore 4024266, che è il numero di fotogrammi in 37 ore, 15 minuti, 42 secondi e 6 fotogrammi. Per riconvertire tali valori in un tempo comprensibile, è possibile utilizzare la seguente funzione:

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 le due funzioni, puoi fare un po ‘di matematica con i tempi. Ad esempio, supponi di avere l’ora 00: 29: 10: 10 nella cella A4 e l’ora 00: 16: 12: 23 nella cella A5. Se metti la seguente formula in una cella, puoi scoprire la differenza tra i due tempi:

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

Il risultato è 00: 12: 57: 17.

Gli esempi qui presentati sono rudimentali; non tengono conto di alcuna gestione degli errori né limitano il controllo dei tempi utilizzati. Puoi espandere gli esempi per adattarli alle tue esigenze oppure puoi cercare una fonte di terze parti. Ad esempio, puoi trovare una spiegazione (con una cartella di lavoro di esempio) per i tempi NTSC e PAL al seguente URL:

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

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (3100) si applica a Microsoft Excel 97, 2000, 2002 e 2003. Puoi trovare una versione di questo suggerimento per l’interfaccia a nastro di Excel (Excel 2007 e versioni successive) qui: