带有时间的日期字符串的TextToColumns

时间:2017-04-08 02:18:57

标签: excel excel-vba date-conversion vba

Excel 2010.我正在excel中导入csv文件以进行进一步处理。不幸的是,在csv日期字段中,日期以与我的PC的默认格式(“mm / dd / yyyy”)不同的格式(“dd / mm / yyyy”)表示。因此,在开始处理数据之前,我需要将每个日期字段(列)转换为我的格式。

Range.TextToColumns方法就像魅力一样:

Sub convertDateColumn()
    Dim myColumn As Range

    Set myColumn = Range("A1:A10")
    myColumn.TextToColumns Destination:=myColumn.Cells(1), DataType:=xlDelimited, FieldInfo:=Array(0, xlDMYFormat)

End Sub

(假设日期字符串在列范围A1:A10中)

...将字符串“1/2/2017”正确转换为2017年2月1日或字符串“2017年2月25日”到2017年2月25日。

但是,某些字段不是纯日期字符串,但也包含时间信息。例如2017年2月1日上午9:30或2017年2月25日上午9:30“25/2/2017 09:30:00”的“1/2/2017 09:30:00”。

不幸的是,上面示例宏中使用的TextToColumns方法似乎不再起作用了。 “1/2/2017 09:30:00”错误地转换为2017年1月2日上午9:30,“25/2/2017 09:30:00”未转换。这是正常的,因为字段信息(xlDMYFormat)不再准确描述字段格式。

我的问题:有没有办法将TextToColumns与包含时间信息的字符串一起使用?或者有其他方法来转换所有列的日期/时间字符串而不循环遍历每个单元格(这很容易但很慢)?

2 个答案:

答案 0 :(得分:2)

也许您只需将日期时间字段设为xlGeneralFormat,然后在处理TextToColumns之后格式化第一列:

myColumn.NumberFormat = "mm/dd/yyyy hh:mm:ss"

例如:

Sub convertDateColumn()
    Dim myColumn As Range

    Set myColumn = Range("A1:A10")
    myColumn.TextToColumns Destination:=myColumn.Cells(1), DataType:=xlDelimited, FieldInfo:=Array(0, xlGeneralFormat)

    ' update format
    myColumn.NumberFormat = "mm/dd/yyyy hh:mm:ss"

End Sub

答案 1 :(得分:2)

要使用时间格式的TTC,您需要拆分时间(分隔符=空格)。这适用于您的数据吗?

您还需要一种处理字符串日期或日期/时间的方法。

最简单的方法是进行真正的导入(数据►获取外部数据►来自文本)并在将数据写入工作表之前正确处理数据。这需要能够使用Space作为分隔符。

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

请注意,上次屏幕截图中的日期已转换为我的“普通”MDY设置,因此它们都代表2月份的日期。

如果这不起作用,请告诉我,因为我有一个宏应该能够以混合格式转换混合日期/时间。