Mostrar milisegundos en Excel

122

Estoy tratando de mostrar milisegundos en una macro de Excel. Tengo una columna de enteros que son marcas de tiempo en milisegundos (por ejemplo, 28095200 es 7:48: 15.200 am), y quiero crear una nueva columna junto a ella que mantenga un promedio móvil y muestre la hora en un hh:mm:ss.000formato.

 Dim Cel As Range
 Set Cel = Range("B1")
 temp = Application.Average(Range("A1:A2")) / 1000
 ms = Round(temp - Int(temp), 2) * 1000
 Cel.Value = Strings.Format((temp / 60 / 60 / 24), "hh:mm:ss") _
                & "." & Strings.Format(ms, "#000")

Esto solo muestra "mm: ss.0" en la celda. Sin embargo, cuando hago clic en la celda, muestra "hh: mm: ss" en la barra de fórmulas. ¿Por qué faltan las horas? ¿Cómo puedo mostrar las horas, los minutos, los segundos y los milisegundos?

Evelyn
fuente

Respuestas:

217

Haga clic derecho en Celda B1y elija Formato de celdas . En Personalizado , ponga lo siguiente en el cuadro de texto etiquetado Tipo :

[h]:mm:ss.000 

Para configurar esto en el código, puede hacer algo como:

Range("A1").NumberFormat = "[h]:mm:ss.000"

Eso debería darte lo que estás buscando.

NOTA: Los campos con formato especial a menudo requieren que el ancho de la columna sea lo suficientemente ancho para todo el contenido del texto formateado. De lo contrario, el texto se mostrará como ######.

Ben McCormack
fuente
¡Hurra! Pero, ¿hay alguna forma de que pueda hacer eso en el código? Ahora, cada vez que ejecuto la macro, el formato se restablece. (porque estoy borrando y recreando la hoja en la macro.) Cel.EntireRow.NumberFormat = "[h]: mm: ss.000" Pero eso me acaba de dar "######" en la celda.
Evelyn
@Evelyn - 3 cosas: 1) Agregué el código que necesita para configurar el formato del número. 2) Asegúrese de que su columna sea lo suficientemente ancha para que quepa todo el texto formateado. Vea mi nota arriba. 3) Vea la respuesta de Gilbert y observe el uso de 3en la Roundfunción. Esto asegura que obtenga 3 lugares decimales en lugar de solo 2.
Ben McCormack
¡Ah! Tienes razón. Solo necesitaba ampliar la columna. Además, solo quería una precisión de 2 en este caso. Solo quería que tuviera el formato 3. ¡Muchas gracias por la ayuda!
Evelyn
25
Acabo de descubrir lo siguiente y quería compartirlo en caso de que otros también experimenten el mismo problema: Si su Windows / Excel está configurado para Alemania, .debe reemplazarse con ,, al igual que para los lugares decimales en números. De lo contrario, Excel se quejará de que no es un formato válido. Entonces, tiene que ser[h]:mm:ss,000
gehho
6

Descubrí en Excel 2007, si los resultados son una tabla de una consulta incrustada, el ss.000 no funciona. Puedo pegar los resultados de la consulta (de SQL Server Management Studio) y formatear la hora sin problemas. Pero cuando incrusto la consulta como una conexión de datos en Excel, el formato siempre da .000 como milisegundos.

Eric
fuente
4

Hice esto en Excel 2000.

Esta declaración debe ser: ms = Round(temp - Int(temp), 3) * 1000

Necesita crear un formato personalizado para la celda de resultado de [h]:mm:ss.000

Gilbert Le Blanc
fuente
-3

Primero represente la época del tiempo de milisegundos como una fecha (generalmente 1/1/1970), luego agregue su tiempo de milisegundos dividido por el número de milisegundos en un día (86400000):

=DATE(1970,1,1)+(A1/86400000)

Si su celda está formateada correctamente, debería ver una fecha / hora legible por humanos.

Jorge
fuente
¡Hola George y bienvenido! Desafortunadamente, el OP parecía pedir específicamente una forma de lograr que la celda esté "formateada correctamente". Su enfoque original ya cubre la parte que está abordando: la conversión de la marca de tiempo de milisegundos en un valor de fecha y hora formable. Además, con seis años, esa es una pregunta bastante antigua en la que está invirtiendo su tiempo. ¡Su opinión será más apreciada en preguntas más nuevas!
Carsten