Доброе утро всем,VBA TimeValue() и электронная таблица Формула TimeValue()
У меня есть более 20000 входов времени в колонке, такие как 6/23/2015 1:05:37.7 PM
и нужно передать его в значение времени Excel может управлять.
мне удалось найти обходной путь:
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
я получаю ошибку типа несовпадение, я также попытался установить временные переменные, чтобы убедиться, что массивы не вызывает проблем, но он по-прежнему не работает ...
Что мне не хватает?
Похоже, у меня нет достаточной репутации upvote Вашего комментария, но спасибо, что работает отлично, мне нужно только, чтобы соответствовать это в массиве, и это будет сделано! – HotFuzz
@HotFuzz Спасибо за отзыв! –