Если вы работаете в английской версии офиса (и имеют английскую операционную систему), эта функция должна дать результаты, которые вам нужно:
пн 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
Общая проблема в вашем вопросе: определение месяца и дня недели: 'Mon May'. Для этой части потребуется некоторый дополнительный код. Будет ли ваше название месяца заполнено с полными именами (май, июнь, август) или с аббревиатурой 3 буквы (май, июнь, август)? –
Всего 3 буквы, как я вижу – Kiran