带时间的日期字符串的 TextToColumns
TextToColumns for date strings with time
Excel 2010。我正在 excel 中导入 csv 文件以进行进一步处理。不幸的是,在 csv 日期字段中,日期的表示格式 ("dd/mm/yyyy") 与我 PC 的默认格式 ("mm/dd/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”正确转换为日期 1-Feb-2017 或将字符串“25/2/2017”正确转换为日期 25-Feb-2017。
但是,有些字段不是纯日期字符串,还包含时间信息。例如,“1/2/2017 09:30:00”代表 2017 年 2 月 1 日的 9:30am 或“25/2/2017 09:30:00”代表 2017 年 2 月 25 日的 9:30am .
不幸的是,上面示例宏中使用的 TextToColumns 方法似乎不再有效。 “1/2/2017 09:30:00”在 2-Jan-2017 上错误地转换为 9:30am,而“25/2/2017 09:30:00”在 converted.This 中不正常一种方法,因为字段信息 (xlDMYFormat) 不再准确描述字段格式。
我的问题:有没有办法将 TextToColumns 与包含时间信息的字符串一起使用?或者还有其他方法可以转换所有列的 date/time 字符串而不循环遍历每个单元格(这很容易但很慢)?
也许您可以将日期时间字段作为 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
要使用带时间格式的 TTC,您需要拆分时间(分隔符 = space)。这适用于您的数据吗?
您还需要一种处理字符串日期或 date/times 的方法。
最简单的方法是进行真正的导入(数据 ► 获取外部数据 ► 从文本)并在数据写入工作表之前正确处理数据。这将需要能够也使用 Space 作为分隔符。
请注意,最后一个屏幕截图中的日期已转换为我的 "normal" MDY 设置,因此它们都代表二月日期。
如果这不起作用,请告诉我,因为我有一个宏应该能够将混合 date/times 转换为混合格式。
Excel 2010。我正在 excel 中导入 csv 文件以进行进一步处理。不幸的是,在 csv 日期字段中,日期的表示格式 ("dd/mm/yyyy") 与我 PC 的默认格式 ("mm/dd/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”正确转换为日期 1-Feb-2017 或将字符串“25/2/2017”正确转换为日期 25-Feb-2017。
但是,有些字段不是纯日期字符串,还包含时间信息。例如,“1/2/2017 09:30:00”代表 2017 年 2 月 1 日的 9:30am 或“25/2/2017 09:30:00”代表 2017 年 2 月 25 日的 9:30am .
不幸的是,上面示例宏中使用的 TextToColumns 方法似乎不再有效。 “1/2/2017 09:30:00”在 2-Jan-2017 上错误地转换为 9:30am,而“25/2/2017 09:30:00”在 converted.This 中不正常一种方法,因为字段信息 (xlDMYFormat) 不再准确描述字段格式。
我的问题:有没有办法将 TextToColumns 与包含时间信息的字符串一起使用?或者还有其他方法可以转换所有列的 date/time 字符串而不循环遍历每个单元格(这很容易但很慢)?
也许您可以将日期时间字段作为 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
要使用带时间格式的 TTC,您需要拆分时间(分隔符 = space)。这适用于您的数据吗?
您还需要一种处理字符串日期或 date/times 的方法。
最简单的方法是进行真正的导入(数据 ► 获取外部数据 ► 从文本)并在数据写入工作表之前正确处理数据。这将需要能够也使用 Space 作为分隔符。
请注意,最后一个屏幕截图中的日期已转换为我的 "normal" MDY 设置,因此它们都代表二月日期。
如果这不起作用,请告诉我,因为我有一个宏应该能够将混合 date/times 转换为混合格式。