Excel vba: конвертировать строку в дату и добавить ее в новый столбец - PullRequest
0 голосов
/ 03 июня 2019

Итак, у меня есть ячейки, содержащие строки даты, такие как:

14/04/2019 10:13:18 AM

как я могу преобразовать его в DateTime, используя vba?

Я пытался использовать .NumberFormat, но некоторыеиз ячеек были преобразованы, а некоторые нет:

enter image description here

Мой код

Sub ConvertToDateTime()

    With Range("Data[Modified On]")
        .NumberFormat = "dd/mm/yyyy hh:mm:ss AM/PM"
        .Value = .Value
    End With

End Sub

И как вставить преобразованныйзначение для нового столбца?Я создал новый столбец с:

    Dim Table As ListObject
    Dim newColNum As Integer

    Set Table = ActiveSheet.ListObjects("Data")
    Table.ListColumns.Add.Name = "New Header"

Могу ли я сделать это без зацикливания?

1 Ответ

1 голос
/ 03 июня 2019

Некоторые клетки были преобразованы, а некоторые нет

Это потому, что формат даты на вашем компьютере отличается от формата данных (это мм / дд / гггг, когда данные в формате "дд / мм / гггг")

Это невозможно исправить без зацикливания. (насколько я знаю) Чтобы это исправить, вам может потребоваться сделать что-то вроде этого:

Sub ConvertToDateTime()
    Dim Cell As Range, h As Long, c As Long
    Range("Data[New Header]").NumberFormat = "dd/mm/yyyy hh:mm:ss AM/PM"
    c = Range("Data[New Header]").Column
    For Each Cell In Range("Data[Modified On]")
        If Right(Cell.Value, 2) = "PM" Then h = 12 Else h = 0
        Cells(Cell.Row, c).Value = DateSerial(Mid(Cell.Value, 7, 4), Mid(Cell.Value, 4, 2), Left(Cell.Value, 2)) + _
            TimeSerial(Mid(Cell.Value, 12, 2) + h, Mid(Cell.Value, 15, 2), Mid(Cell.Value, 18, 2))
    Next
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...