2012-06-21 39 views
8

¿Es posible formatear la hora en formato [h]: mm usando VBA?¿Cómo formateo la hora en [h]: formato mm excel usando la función de formateo() en VBA

[h]: mm formato en Excel mostraría 25 horas como 25:00, 125 horas como 125: 00

He intentado varias cosas tales como:

format(datetime, "[h]:mm") 
format(datetime, "H:mm") 
format(datetime, "hh:mm") 

Ninguno de estos tener el efecto deseado También he echado un vistazo a través de la ayuda de MS y no encuentro nada útil.

+0

¿Qué está obteniendo ** en lugar de ** de lo que espera obtener? ¿Cómo se declara 'datetime' y cómo se rellena? –

+0

datetime es solo una variable doble. y las funciones dan diferentes resultados. hh: mm es el más cercano, pero solo da horas hasta 24 horas, 25 horas muestra como 01:00 – Sam

Respuesta

14

utilizar la función TEXTO hoja de trabajo a través del objeto de aplicación, así como:

x = Application.Text(.294,"[h]:mm") 
+0

+1: eso es incluso mejor que el uso de una celda de repuesto en alguna parte – SeanC

1
no

con la función de formato, pero se puede usar Range(MyData).NumberFormat = "[h]:mm"

1

Parece que la función de VBA Format no tiene forma integrada de hacer esto. (Ojos que se mueven.)

Esta función casera hará el truco:

Function HoursAndMinutes(datetime As Date) As String 
    Dim hours As Integer 
    Dim minutes As Integer 
    hours = Int(datetime) * 24 + Hour(datetime) ' the unit of Date type is 1 day 
    minutes = Round((datetime * 24 - hours) * 60) 
    HoursAndMinutes = hours & ":" & Format(minutes, "00") 
End Function 

Uso:

Dim datetime As Date 
    datetime = TimeSerial(125, 9, 0) ' 125 hours and 9 minutes 
    Debug.Print HoursAndMinutes(datetime) ' 125:09 
+0

Hola. Gracias por esto, es una buena forma de lograr lo que necesito. Le di una votación positiva, pero voy a aceptar el método Application.Text, ya que es un poco más limpio. Sam – Sam

4

JFC se me adelantó, pero esto es lo que se me ocurrió de todos modos. ..

Sub Test() 
    Debug.Print FormatHM(24/24)  '24:00 
    Debug.Print FormatHM(25/24)  '25:00 
    Debug.Print FormatHM(48/24)  '48:00 
    Debug.Print FormatHM(48.6/24) '48:36 
End Sub 

Function FormatHM(v As Double) As String 
    FormatHM = Format(Application.Floor(v * 24, 1), "00") & _ 
       ":" & Format((v * 1440) Mod 60, "00") 

End Function 
+0

gracias por tomarse el tiempo para escribir esto. Es una solución muy buena, di una votación positiva. – Sam

Cuestiones relacionadas