VBA TimeValue()和电子表格公式TimeValue()

大家早上好,

我在6/23/2015 1:05:37.7 PM等列中有超过2万个时间input,需要通过Excel可以pipe理的时间值进行传输。

我设法find一个解决方法:

 Set wrTB = Worksheets("TEST BENCH Data") wrTB.UsedRange lastRowTB = wrTB.UsedRange.Rows.Count lastColumnTB = wrTB.UsedRange.Columns.Count If lastRowTB > 1 Then 'makes sure there is data on the worksheet If wrTB.Cells(7, lastColumnTB) <> "" Then 'makes sure time has not already been formated Dim aTempsTB As Variant, TempsTB() As String ReDim TempsTB(lastRowTB - 7, 1) aTempsTB = wrTB.Range(wrTB.Cells(8, 2), wrTB.Cells(lastRowTB, 2)) For i = 1 To lastRowTB - 7 TempsTB(i - 1, 0) = Right(aTempsTB(i, 1), 13) Next i wrTB.Range(wrTB.Cells(8, lastColumnTB + 2), wrTB.Cells(lastRowTB, lastColumnTB + 2)).NumberFormat = "[h]:mm:ss.000" wrTB.Cells(8, lastColumnTB + 2).FormulaR1C1 = "=TIMEVALUE(RC[-1])" wrTB.Cells(8, lastColumnTB + 2).AutoFill Destination:=wrTB.Range(wrTB.Cells(8, lastColumnTB + 2), Cells(lastRowTB, lastColumnTB + 2)), Type:=xlFillDefault wrTB.Range(wrTB.Cells(8, lastColumnTB + 1), wrTB.Cells(lastRowTB, lastColumnTB + 1)) = TempsTB Columns(lastColumnTB + 2).Copy Columns(lastColumnTB + 2).PasteSpecial Paste:=xlPasteValues Columns(lastColumnTB + 1).Delete wrTB.UsedRange lastColumnTB = wrTB.UsedRange.Columns.Count End If End If 

基本上,它的工作,但它是一个丑陋的解决方法,我想改变一些更“专业”

如果我将代码更改为:

 For i = 1 To lastRowTB - 7 TempsTB(i - 1, 0) = TimeValue(Right(aTempsTB(i, 1), 13)) Next i 

我得到一个types不匹配的错误,我也尝试设置临时variables,以确保数组不会造成麻烦,但它仍然无法正常工作…

我错过了什么?

使用B1中的数据,这会将其转换为可用时间

 Sub OutOfTime() Dim s As String s = Range("B1").Text ary = Split(s, " ") Range("B1").Formula = "=timevalue(""" & ary(1) & " " & ary(2) & """)" End Sub 

在这里输入图像描述

你可以使用公式:

 =TIMEVALUE(TEXT(A1,"hh:mm:ss")) 

并保留你在那里的文字。

问题是你的时间对于Excel来说太具体了。 Excel只能识别第二个时间。 但是你有毫秒。 这是什么导致问题,为什么Excel不能识别它。 你需要清除源代码中的毫秒数(秒数之后的点以及PM之前的数值)。

不起作用:

 Debug.Pring IsDate("6/23/2015 1:05:37.7 PM") 

作品:

 Debug.Pring IsDate("6/23/2015 1:05:37 PM")