Изменить формат даты в Excel VBA

У меня есть дата в файле журнала. Дата в файле журнала выглядит примерно так:

Пн Май 14 21:31:00 EDT 2012

Я хотел бы преобразовать это в формат «dd-MM-yyyy hh: mm: ss»

Dim DateVal1 As String Dim Date1 As Date DateVal1 = "Mon May 14 21:31:00 EDT 2012" Date1 = Format(DateVal, "ddd mmm dd hh:mm:ss EDT yyyy") Date1 = Format(Date1 , "dd-MM-yyyy hh:mm:ss") 

Следующий код не преобразуется в формат, который я ожидал. Любая идея, если мне что-то не хватает.

благодаря

Возможно, вы захотите рассмотреть возможность извлечения компонентов datetime из вашей пользовательской строки datetime. Например, вы можете получить день, месяц, год и т. Д. Возможно, вы можете использовать функции манипуляции строками, такие как Mid , Replace и т. Д.

Если ваша пользовательская строка согласована, вы можете создать свою собственную функцию, которая выполняет строковые манипуляции и выводит значение datetime.

Просто мысль здесь. Надеюсь, поможет.

Если вы используете английскую версию Office (и имеете английскую операционную систему), эта функция должна дать ваши результаты, которые вам нужны:

Пн Май 14 21:31:00 EDT 2012 >> 2012-05-14 21:31:00

 Function DateConversion(DateVal1 As String) Dim DateParts As Variant DateParts = Split(DateVal1, " ") Dim i For i = 1 To 12 If InStr(1, Left(MonthName(i), 3), DateParts(1), vbTextCompare) > 0 Then Exit For Next i DateConversion = CDate(DateSerial(DateParts(UBound(DateParts)), i, DateParts(2)) & " " & DateParts(3)) End Function 

Однако, если вы используете какой-либо другой язык, для него могут потребоваться некоторые дополнительные изменения, относящиеся к именам месяцев (функция MonthName возвращает имена месяцев на вашем системном языке).

EDIT: решение для разных месяцев месяца

В этой ситуации нам нужно создать дополнительный массив с именами месяцев, чтобы иметь возможность сравнивать часть исходной строки данных.

 Function DateConversionEng(DateVal1 As String) Dim DateParts As Variant DateParts = Split(DateVal1, " ") Dim Months As Variant Months = Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "Octover", "November", "December") Dim i For i = 1 To 12 If InStr(1, Months(i), DateParts(1), vbTextCompare) > 0 Then Exit For Next i DateConversionEng = CDate(DateSerial(DateParts(UBound(DateParts)), i + 1, DateParts(2)) & " " & DateParts(3)) End Function 
Давайте будем гением компьютера.