Excel VBA格式“Fri Feb 27 08:45:00 CST 2015”变为可用date

目前我正在为报告目的而build立一个数据库。 原始数据将来自一个自动化的数据源,发送一个CSV到一个共享的位置。 我有一些进程,出去获取数据,然后把它放在一个共享的位置,然后我有一个Excel文档,连接设置为数据,然后将连接到数据并刷新工作簿时打开。 这个过程是完整的,但我遇到的问题是,原始数据源是导出CSV格式的date为“Fri Feb 27 08:45:00 CST 2015”(例如)。 我需要把它变成“MM / dd / yyyy hh:mm:ss”的格式。这时从供应商处获得输出格式并不是一个可行的select。

任何帮助将不胜感激,我真的不知道甚至从哪里开始,所以我没有代码发布。 我会说这将在大量的行上完成。 例如,它可能是B2:B10000

假设你得到的格式总是相同的,你可以使用一个正则expression式,然后重build它到一个Date ,然后格式化:

 'Requires reference to Microsoft VBScript Regular Expressions Sub ParseDateExample() testValue = "Fri Feb 27 08:45:00 CST 2015" With New RegExp .Pattern = ".+\s(.+)\s(\d{1,2})\s(\d{2}:\d{2}:\d{2})\s.+(\d{4})" If .Test(testValue) Then Dim matches As Object Set matches = .Execute(testValue) Dim temp As String temp = matches(0).SubMatches(0) & "/" & matches(0).SubMatches(1) & "/" & _ matches(0).SubMatches(3) & " " & matches(0).SubMatches(2) If IsDate(temp) Then Debug.Print Format$(CDate(temp), "mm/dd/yyyy hh:nn:ss") End If End If End With End Sub 

不考虑几个时区:

 Sub convertDate() Dim str As String Dim arr() As String Dim mm As String Dim convDate As String str = "Fri Feb 27 08:45:00 CST 2015" arr() = Split(str) Select Case arr(1) Case "Jan": mm = "01" Case "Feb": mm = "02" Case "Mar": mm = "03" Case "Apr": mm = "04" Case "May": mm = "05" Case "Jun": mm = "06" Case "Jul": mm = "07" Case "Aug": mm = "08" Case "Sep": mm = "09" Case "Oct": mm = "10" Case "Nov": mm = "11" Case "Dec": mm = "12" End Select convDate = mm & "/" & arr(2) & "/" & arr(5) & " " & arr(3) MsgBox (convDate) End Sub