如何将给定数字转换为时间格式HH:MM:SS在VBA中?

时间:2012-06-18 17:16:34

标签: excel vba datetime

我收到了自定义格式(类型:000000)中代表军事时间的数字列表。它总是包含6位数字,必要时使用前导零。例如:

  • 123456变为12:34:56(下午)
  • 000321成为00:03:21(上午)
  • 142321变为14:23:21(下午)

如何将A列中的整数转换为B列中的格式(hh:mm:ss)?我想用军用,24小时制。

3 个答案:

答案 0 :(得分:7)

假设它是一个实数,而不是文本:

=TIME(INT(A1/10000),INT(MOD(A1,10000)/100),MOD(A1,100))

如果是文字,请使用

=TIME(VALUE(LEFT(A1,2)),VALUE(MID(A1,3,2)),VALUE(RIGHT(A1,2)))

根据需要格式化结果。

作为VBA函数:整数:

Function RetTime(IntTime As Long) As Date
RetTime = TimeSerial(Int(IntTime / 10000), Int((IntTime Mod 10000) / 100), (IntTime Mod 100))
End Function

字符串:

Function RetTimeS(StrTime As String) As Date
RetTimeS = TimeSerial(Val(Left(StrTime, 2)), Val(Mid(StrTime, 3, 2)), Val(Right(StrTime, 2)))
End Function

答案 1 :(得分:6)

尝试TEXT功能,即在B1

=TEXT(A1,"00\:00\:00")+0

并格式为hh:mm:ss

答案 2 :(得分:3)

我无法判断您是想要VBA代码,还是需要单元格的公式,或Custom, type 00000是什么。从正确使用VBA功能的角度来看,Sean上面的答案可能是最好的,但是我不相信有任何方法可以在军事时间格式化时间对象,并将“(am)”和“(pm)”添加到最后。至少不使用标准的Excel格式。 (可能是因为上午和下午在军事时间是多余的。)

所以假设你的源数据真的是字符串,这里有一个替代方案,以防你出于某种原因真的想要'am'和'pm':

=MID(A1,1,2) & ":" & MID(A1,3,2) & ":" & MID(A1,5,2) & IF(VALUE(MID(A1,1,2)) < 12," (am)", " (pm)")