Como formatar o tempo em [h]: mm formato excel usando a função format () no VBA

É possível formatar o tempo no formato [h]: mm usando o VBA?

[h]: o formato mm no excel mostrará 25 horas como 25:00, 125 horas como 125: 00

Eu tentei várias coisas como:

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

Nenhum destes tem o efeito desejado. Eu também dei uma olhada na ajuda do MS e não consegui encontrar nada de útil.

0
datetime é apenas uma variável dupla. e as funções dão resultados diferentes. hh: mm é o mais próximo, mas só dá horas até 24 horas, 25 horas mostra como 01:00
adicionado o autor Sam, fonte
O que você está recebendo em vez do que você espera obter? Como o datetime é declarado e como ele é preenchido?
adicionado o autor Tim Williams, fonte

4 Respostas

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

0
adicionado

Parece que a função Format do VBA não tem uma maneira integrada de fazer isso. (Olhos revirados.)

Esta função caseira fará o truque:

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
adicionado
Oi. Obrigado por isso, é uma boa maneira de conseguir o que eu preciso. Eu dei uma votação para cima, mas vou aceitar o método Application.Text como é um pouco mais limpo. Sam
adicionado o autor Sam, fonte

JFC me bateu para isso, mas aqui está o que eu fiz de qualquer maneira ...

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
adicionado
Obrigado por tomar o tempo para escrever isso. É uma ótima solução, eu dei um voto.
adicionado o autor Sam, fonte

Use a função de planilha TEXT através do objeto do aplicativo, como:

  x = Application.Text(.294,"[h]:mm")
0
adicionado
+1: isso é ainda melhor do que o uso de uma célula reserva em algum lugar
adicionado o autor SeanC, fonte