2010-06-22 61 views
101

Estoy tratando de mostrar milisegundos en una macro de Excel. Tengo una columna de números enteros que son simplemente marcas de tiempo en milisegundos (por ejemplo, 28095200 es 7: 48: 15.200 a.m.), y quiero hacer una nueva columna al lado, que mantiene un promedio continuo y muestra la hora en un "hh: mm : formato ss.000 ". He probado múltiples rutas diferentes, pero simplemente no puedo obtener los milisegundos sin causar que pasen cosas raras.Mostrar milisegundos en Excel

Esto es lo que tengo ahora:

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") 

Por alguna razón, esto sólo se 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 en la celda?

Además, otra cosa extraña que sucede es que si cambio la última línea a Strings.Format(ms, "#000."), entonces obtengo "hh: mm: ss.000". Eso es lo que quiero, simplemente no el período extra.

Respuesta

194

Haga clic con el botón derecho en Celda B1 y elija Celdas de formato. En personalizada, poner lo siguiente en el cuadro de texto llamado Tipo:

[h]:mm:ss.000 

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

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

que debe darle lo que usted' que estas buscando.

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

+0

¡Yay! Pero, ¿hay alguna manera de hacerlo en el código? Ahora, cada vez que ejecuto la macro, el formateo se restablece. (porque estoy eliminando y recreando la hoja en la macro.) Cel.EntireRow.NumberFormat = "[h]: mm: ss.000" Pero eso solo me dio "######" en la celda. – Evelyn

+0

@Evelyn - 3 cosas: 1) Agregué el código que necesita para establecer el formato del número. 2) Asegúrese de que su columna sea lo suficientemente amplia para ajustarse a todo el texto formateado. Ver mi nota arriba. 3) Vea la respuesta de Gilbert y note el uso de '3' en la función' Round'. Esto asegura que obtienes 3 decimales en lugar de solo 2. –

+0

¡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 estuviera formateado para 3. ¡Muchas gracias por la ayuda! – Evelyn

4

lo hice en Excel 2000.

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

Es necesario crear un formato personalizado para la célula resultado de [h]:mm:ss.000

4

he descubierto 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 (desde SQL Server Management Studio) y formatear la hora perfectamente. Pero cuando inserto la consulta como una conexión de datos en Excel, el formato siempre da .000 como milisegundos.

-3

Primera representan la época del tiempo de milisegundos como una fecha (por lo general 1/1/1970), a continuación, añadir su tiempo 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.

+0

¡Hola George y bienvenido! Desafortunadamente, el OP pareció 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 formatable. Además, con seis años, esa es una pregunta bastante antigua en la que invierte su tiempo. ¡Su opinión sería más apreciada en las preguntas más nuevas! – Carsten

Cuestiones relacionadas