¿Cómo formateo la hora en [h]: formato mm excel utilizando la función format () en VBA

¿Es posible formatear la hora en formato [h]: mm usando VBA?

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

He intentado varias cosas como:

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

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

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
agregado el autor Sam, fuente
¿Qué obtiene en cambio de lo que espera obtener? ¿Cómo se declara datetime y cómo se rellena?
agregado el autor Tim Williams, fuente

4 Respuestas

not with the format function, but you can use Range(MyData).NumberFormat = "[h]:mm"

0
agregado

Parece que la función Format de VBA no tiene una forma incorporada de hacerlo. (Ojos rodando)

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
agregado
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
agregado el autor Sam, fuente

JFC me ganó, 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
agregado
gracias por tomarse el tiempo para escribir esto. Es una solución muy buena, di una votación positiva.
agregado el autor Sam, fuente

Utilice la función de hoja de cálculo TEXTO a través del objeto de la aplicación, así:

  x = Application.Text(.294,"[h]:mm")
0
agregado
+1: eso es incluso mejor que mi uso de una celda de repuesto en alguna parte
agregado el autor SeanC, fuente