2012-06-21 51 views
8

Có thể định dạng thời gian theo định dạng [h]: mm bằng VBA không?Làm cách nào để định dạng Thời gian bằng [h]: định dạng excel mm sử dụng hàm format() trong VBA

[h]: mm trong excel sẽ hiển thị 25 giờ là 25:00, 125 giờ như 125: 00

Tôi đã thử một vài điều như:

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

Không ai trong số những có hiệu quả mong muốn. Tôi cũng đã có một cái nhìn thông qua sự giúp đỡ MS và không thể tìm thấy bất cứ điều gì hữu ích.

+0

Bạn nhận được gì ** thay vì ** của những gì bạn mong đợi sẽ nhận được? 'Datetime' được khai báo như thế nào và nó được điền như thế nào? –

+0

datetime chỉ là một biến kép. và các chức năng cho kết quả khác nhau. hh: mm là gần nhất, nhưng chỉ cho giờ tối đa 24 giờ, 25 giờ hiển thị là 01:00 – Sam

Trả lời

14

Sử dụng hàm trang tính TEXT thông qua đối tượng ứng dụng, như vậy:

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

+1: điều đó thậm chí còn tốt hơn việc tôi sử dụng ô dự phòng ở đâu đó – SeanC

1

không phải với chức năng định dạng, nhưng bạn có thể sử dụng Range(MyData).NumberFormat = "[h]:mm"

1

Dường như Format chức năng VBA của không có built-in cách để làm điều này. (Mắt lăn.)

chức năng sản xuất trong nước này sẽ làm các trick:

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 

Cách sử dụng:

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

Xin chào. Cảm ơn vì điều này, đó là một cách hay để đạt được những gì tôi cần. Tôi đã bỏ phiếu lên nhưng tôi sẽ chấp nhận phương thức Application.Text vì nó sạch hơn một chút. Sam – Sam

4

JFC đánh bại tôi vào nó, nhưng đây là những gì tôi đã đưa ra anyway. ..

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

cảm ơn bạn đã dành thời gian viết bài này. Đó là một giải pháp rất hay, tôi đã bỏ phiếu. – Sam

Các vấn đề liên quan