英語版の Office を実行している場合 (および英語のオペレーティング システムを使用している場合)、この関数は必要な結果を提供するはずです。
月 5 月 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 関数はシステム言語で月の名前を返します)。
編集:異なる言語の月名の状況に対する解決策
この状況では、元のデータ文字列の一部を比較できるように、月名を含む追加の配列を作成する必要があります。
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