Я настоятельно рекомендую использовать функцию TimeSerial для создания формата реального времени, а не строки снова. Недостаток использования функции Format заключается в том, что она снова создает строку. Обратите внимание, что эта строка может выглядеть как время, но это не . Для Excel это просто строка, в то время как если вы используете TimeSerial()
, вы получите реальное время, которое Excel распознает как время и может вычислить с помощью.
Правило № 1, когда вы работаете с датами и время:
Никогда не позволяйте Excel конвертировать дату или время самостоятельно. Никогда не позволяйте Excel угадать, какой формат этой строки. Никогда не позволяйте Excel решать что-либо! • Вместо этого всегда указывайте c и разбирайте строку самостоятельно. Вы единственный, кто может сказать на 100%, какой формат должен быть правильным. Excel определенно потерпит неудачу рано или поздно.
Option Explicit
Public Sub ConvertStringIntoTimes()
Dim Cell As Range
For Each Cell In Range("A1:A10").Cells
Dim RawData() As String 'split cell text by `:`
RawData = Split(Cell.Text, ":")
'validate if one is empty string or non-numeric
Dim i As Long
For i = 0 To UBound(RawData)
If RawData(i) = vbNullString Then
RawData(i) = 0 'epmty string is considered to be zero
ElseIf Not IsNumeric(RawData(i)) Then
GoTo NextCell 'non-numeric cannot be handled continue with next cell
End If
Next i
Dim OutputTime As Date
Select Case UBound(RawData)
Case 2: '01:22:33 or :22:33
OutputTime = TimeSerial(RawData(0), RawData(1), RawData(2))
Case 1: '22:33 or :33
OutputTime = TimeSerial(0, RawData(0), RawData(1))
Case 0: '33
OutputTime = TimeSerial(0, 0, RawData(0))
Case Else: 'anything else that connot be converted
GoTo NextCell
End Select
'set numberformat and write value as real time
Cell.NumberFormat = "[$-F400]h:mm:ss AM/PM" 'choose your desired time format
Cell.Value = OutputTime
NextCell:
Next Cell
End Sub
Изображение 1: Слева - входные данные, справа столбец - вывод, который будет выполнять процедура дать.