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

Excel 如何在VBA中将给定的数字转换为时间格式HH:MM:SS?,excel,vba,datetime,Excel,Vba,Datetime,我收到了一个自定义格式的数字列表(类型:000000),表示军事时间。它始终包含6位数字,必要时使用前导零。例如: 123456变为12:34:56(下午) 000321变为00:03:21(上午) 142321变为14:23:21(下午) 如何将A列中的整数转换为B列中的格式(hh:mm:ss)?我想使用军用24小时时钟。假设它是一个真正的整数,而不是文本: =时间(整数(A1/10000)、整数(模数(A110000)/100)、模数(A1100)) 如果是文本,则使用 =时间(值(左(

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

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

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

假设它是一个真正的整数,而不是文本:

=时间(整数(A1/10000)、整数(模数(A110000)/100)、模数(A1100))

如果是文本,则使用

=时间(值(左(A1,2))、值(中(A1,3,2))、值(右(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

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

=时间(整数(A1/10000)、整数(模数(A110000)/100)、模数(A1100))

如果是文本,则使用

=时间(值(左(A1,2))、值(中(A1,3,2))、值(右(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

我无法判断您是否需要VBA代码或单元格的公式,或者自定义类型00000是什么。从正确使用VBA函数的角度来看,Sean上面的答案可能是最好的,但我不认为有任何方法可以在军事时间中设置时间对象的格式,并在末尾加上“(am)”和“(pm)”。至少不使用标准Excel格式。(可能是因为am和pm在军事时间是多余的。)

因此,假设您的源数据是真正的字符串,这里有一个替代方案,以防出于某种原因确实需要“am”和“pm”:

=MID(A1,1,2) & ":" & MID(A1,3,2) & ":" & MID(A1,5,2) & IF(VALUE(MID(A1,1,2)) < 12," (am)", " (pm)")
=MID(A1,1,2)&“&MID(A1,3,2)&”:“&MID(A1,5,2)&IF(VALUE(MID(A1,1,2))<12”,“上午”,“下午”

我不知道您想要的是VBA代码还是单元格的公式,或者自定义类型00000是什么。从正确使用VBA函数的角度来看,Sean上面的答案可能是最好的,但我不认为有任何方法可以在军事时间中设置时间对象的格式,并在末尾加上“(am)”和“(pm)”。至少不使用标准Excel格式。(可能是因为am和pm在军事时间是多余的。)

因此,假设您的源数据是真正的字符串,这里有一个替代方案,以防出于某种原因确实需要“am”和“pm”:

=MID(A1,1,2) & ":" & MID(A1,3,2) & ":" & MID(A1,5,2) & IF(VALUE(MID(A1,1,2)) < 12," (am)", " (pm)")
=MID(A1,1,2)&“&MID(A1,3,2)&”:“&MID(A1,5,2)&IF(VALUE(MID(A1,1,2))<12”,“上午”,“下午”

尝试文本功能,即在B1中

=文本(A1,“00\:00\”+0


和格式为hh:mm:ss

尝试文本功能,即在B1中

=文本(A1,“00\:00\”+0


格式为hh:mm:ss

您是如何“将它们作为整数接收”的
000321
不是整数,因此您必须以其他格式获取它们。(知道这种格式可能会使编写答案更容易。)你是对的……格式是自定义的,键入:000000你的问题标记为“vba”,但你真的想在vba代码中这样做吗?或者你只是想要一个可以在Excel单元格中使用的公式?我想在VBA代码中这样做。你是如何“将它们作为整数接收”的
000321
不是整数,因此您必须以其他格式获取它们。(知道这种格式可能会使编写答案更容易。)你是对的……格式是自定义的,键入:000000你的问题标记为“vba”,但你真的想在vba代码中这样做吗?或者您只是想要一个可以在Excel单元格中使用的公式?我想在VBA代码中执行此操作在Excel的VBA编辑器中,我尝试使用您的公式,但出现错误“未定义子函数或函数”。我做错了什么?这是一个公式-不需要VBA我理解,但我尝试在VBA中这样做(而不是使用公式)。这就是我标记VBA的原因。我尝试将您的公式改编为VBA,但没有成功。我添加了VBA等效项-函数返回调用子函数的时间-使用Excel VBA编辑器中与您的数据格式相对应的格式。我尝试使用您的公式,但出现错误“未定义子函数或函数”。我做错了什么?这是一个公式-不需要VBA我理解,但我尝试在VBA中这样做(而不是使用公式)。这就是我标记VBA的原因。我尝试将您的公式改编为VBA,但没有成功。我添加了VBA等效项-函数将时间返回给调用的子函数-使用与您的数据格式相对应的格式,我把am和pm放在括号里是为了显示一天中的哪一部分…但我不希望am或pm出现在我的结果中只是数字和冒号对不起,艾伦,我把am和pm放在括号里是为了显示一天中的哪一部分…但我不希望am或pm出现在我的结果中只是数字和冒号