sábado, octubre 27, 2007

Medir fracciones de segundos en Excel (décimas, centésimas, milésimas)

Uno de mis lectores me consulta cómo hacer cálculos de diferencia de tiempos en Excel tomando en consideración fracciones de segundos. Es decir, expresar los tiempos con décimas, centésimas y/o milésimas de segundos.

El formato de Excel para expresar fracciones de segundos es

hh:mm:ss,000

Este es un formato personalizado y debemos definirlo usando el diálogo Formato de Celdas




Dependiendo de las definiciones del sistema, la coma en "ss,000" debe ser reemplazada por un punto.

Digamos que tomamos los tiempos de una competición de natación. Para calcular la diferencia de tiempos empezamos por dar el formato adecuado a los rangos que contendrán los tiempos (en nuestro caso mm:ss,000, es decir minutos, segundos y fracción de segundo); luego ponemos los tiempos y calculamos la diferencia



Un detalle interesante de notar es el siguiente:



A pesar de haber escrito en la celda 01:24,140, la barra de las fórmulas muestra 12:01:24 a.m. Esto no tendría gran importancia si no fuera por el siguiente hecho:

- seleccionamos la celda B2 de nuestra tabla, que contiene el tiempo del primer nadador
- ahora presionamos F2 para editar el contenido de la celda
- inmediatamente presionamos Enter, cuidándonos de no cambiar nada en la celda



El resultado es que Excel, a pesar del formato que hemos dado, cambia el contenido de la celda a la hora del día.

La única explicación que le encuentro a este fenómeno es que si bien Excel usa las fracciones de segundos para los cálculos, no los expone en la barra de fórmulas. Por esto al editar el contenido de la celda, las fracciones de segundo se pierden.

La conclusión es que cuando usamos Excel para cálculos que incluyen fracciones de segundos, debemos tener mucho cuidado cuando editamos las celdas.
Otra conclusión importante es que la máxima precisión posible con Excel es de milésimas de segundo. Si agregamos un cero más al formato mostrado más arriba, por ejemplo mm:ss,00000, Excel seguirá exhibiendo los resultados hasta la precisión de milésimas de segundo como con mm:ss,000.

Una solución para estos problemas es usar una función definida por el usuario (UDF) como la propuesta por Doug Jenkins en un comentario a una nota en Daily Dose of Excel:

Function ETime(Hours As Double, Mins As Double, Secs As Double) As Double
ETime = ((Secs / 60 + Mins) / 60 + Hours) / 24
End Function

Esta función permite usar fracciones de segundos más precisas que las milésimas de segundo.

Technorati Tags:

9 comentarios:

  1. Si tengo frames por segundo: esta buena la idea, para usar frames por segundos. Puedo usar las funciones de hora, munito y segundo de excel para pasar todo a frames. Pero si tengo por ejemplo 9:07:19,24 no sé como tomar esos 24 frames para sumarlo a lo demás, osea lo que quiero lograr es
    9*60*60*30+7*60*30+19*30+24=985194 frames

    ResponderBorrar
  2. Estimado,
    no termno de entender la conexión entre horas, minutos y segundos (y tal vez decenas, centenas o milésimas de segundo) y los frames.
    Si "frames" son centenas de segundo, en 9:07:19 horas hay 33429 segundos. Este resultado puede obtenerse multiplicando 9:07:19 X 86400.

    86400 es el resultado de multiplicar 24 horas X 60 minutos X 60 segundos. Multiplicando por 8640000 obtendríamos el total en centenas (frames?).

    ResponderBorrar
  3. Hola, pido disculpas, y paso a explicar.
    El frame es la unidad de medida que se utiliza para cuadros por segundo (en video). Es una unidad mas chica de medida que el segundo. Dependiendo del tipo de video, puede tener 30 ó 35 frames por segundo.
    Suponiendo que FPS (frames por segundo)= 35,
    Lo que yo quiero lograr en un excel es lo siguiente:
    01:20:30,25
    + 02:03:22,14
    -----------
    03:23:53,04

    Osea, el rando de horas va hasta 60, igual que el de minutos y segundos. Pero el rango de frames va hasta 35.

    Se entiende?

    Gracias y Saludos.
    Luis

    ResponderBorrar
  4. Luis,
    no podemos mezclar unidades (tiempo y frames). El formato de datos permite presentar los datos de una manera determinada, pero no puede hacer conversiones de una unidad a otra.
    Por ahora la única manera que se me ocurre de lograr lo que quieres hacer es una una UDF (función definida por el usuario, macro).

    ResponderBorrar
  5. Gracias maestro. me sacaste de un embrollo. Muchísimas gracias.

    ResponderBorrar
  6. Se podrian sumar las horas minutos y segundos y luego los frames, entendiendo mediante una formula que si da 35 o mas de sume 1 segundo a los segundos y quede los 2 numeros de esa suma realizada.

    ResponderBorrar
  7. Cómo hago para poder tener tiempo negativo, por que no me deja. supongamos 01:30,846 - 01:29,682. No da el resultado, por que no muestran números negativos

    ResponderBorrar
  8. Fijate en la explicación que pongo en esta nota.

    ResponderBorrar
  9. Me interesa mucho lo de los frames, puesto que necesito calcular el tiempo que se hace de varios XDCam y debo sumarlo(en este caso 1 segundo = 25 frames). Alguien puede ayudarme con una UDF? gracias

    ResponderBorrar

Nota: sólo los miembros de este blog pueden publicar comentarios.