Excel VBA-格式设置“;2015年2月27日星期五08:45:00 CST“;进入一个可用的日期
我目前正在为报告目的建立一个数据库。原始数据将来自自动数据源,该数据源将csv发送到共享位置。我有一些进程,这些进程先获取数据,然后将其放在共享位置,然后我有一个excel文档,该文档设置了与数据的连接,然后将连接到数据,并在打开工作簿时刷新。这个过程已经完成,但我遇到的问题是,原始数据源正在导出csv,它正在将日期格式化为“Fri Feb 27 08:45:00 CST 2015”(例如)。我需要将其转换为“MM/dd/yyyy hh:MM:ss”格式,此时更改供应商的输出格式是不可行的Excel VBA-格式设置“;2015年2月27日星期五08:45:00 CST“;进入一个可用的日期,vba,excel,date,datetime,Vba,Excel,Date,Datetime,我目前正在为报告目的建立一个数据库。原始数据将来自自动数据源,该数据源将csv发送到共享位置。我有一些进程,这些进程先获取数据,然后将其放在共享位置,然后我有一个excel文档,该文档设置了与数据的连接,然后将连接到数据,并在打开工作簿时刷新。这个过程已经完成,但我遇到的问题是,原始数据源正在导出csv,它正在将日期格式化为“Fri Feb 27 08:45:00 CST 2015”(例如)。我需要将其转换为“MM/dd/yyyy hh:MM:ss”格式,此时更改供应商的输出格式是不可行的 任何
任何帮助都将不胜感激,我真的不知道从哪里开始,所以我没有代码发布。我会说,这将在大量的行上完成。例如,它可能是B2:B10000,但不考虑几个时区:
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
不考虑几个时区:
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
假设得到的格式始终相同,则可以使用正则表达式,然后将其重新生成为日期,然后格式化:
'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
假设得到的格式始终相同,则可以使用正则表达式,然后将其重新生成为日期,然后格式化:
'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
请注意,任何简单的字符串操作都可能与时区相冲突。如果您所有的时间都是本地的,并且您希望将它们作为本地处理,那么这是可行的,但否则事情可能会变得糟糕。对不起,我应该说,它们都将作为本地处理,并且都是本地的。请注意,任何简单的字符串操作都可能会与时区相冲突。如果你所有的时间都是本地的,你想把它们处理成本地的,这是可行的,但否则事情会变得很糟糕。对不起,我应该说,它们都会被处理成本地的,而且都是本地的。对不起,我在我的帖子上做了一个编辑,我将不得不在大量的单元格上这样做,你认为在循环中这样做会好吗?比如可能是一个for-each或do-while?@SamL是的,你可以在一个循环中完成。太棒了,我在每个循环中都使用了这个,效果非常好!对不起,我在我的帖子上做了一个编辑,我将不得不在大量的单元格上进行编辑,你认为这在循环中是好的吗?比如可能是一个for-each或do-while?@SamL是的,你可以在一个循环中完成。太棒了,我在每个循环中都使用了这个,效果非常好!