我需要编写一个Excel VBA程序来读取文本文件并按时间戳对其进行排序。以下是文本文件的示例:
Time / Date ColumnB Column C 3/03/2017 3:07 Value B2 Value C2 3/02/2018 9:02 Value B4 Value C4 16/02/2018 9:03 Value B5 Value C5 17/02/2018 9:04 Value B6 Value C6 (File Name: import_File.csv)
,其中时间/日期采用DD / MM / YYYY HH:MM格式。
但是,当我尝试在VBA中打开它时,它遵循美国格式(MM / DD / YYYY)会自动错误地解释了第一列
File |Correct interpretation |VBA interpretation ----------------+-----------------------+--------------------------------- 3/03/2017 3:07 |3 Mar 2017 3:07:00 |3 Mar 2017 3:07 3/02/2018 9:02 |3 Feb 2018 9:02:00 |2 Mar 2018 9:02 16/02/2018 9:03 |16 Feb 2018 9:03:00 |"16/02/2018 9:03:00" as a text 17/02/2018 9:04 |17 Feb 2018 9:04:00 |"17/02/2018 9:04" as a text
以下是如何打开文件:
设置Data_File = Application.Workbooks.Open(“ import_File.csv”,3,True,1)
我确实尝试使用 Selection.NumberFormat =“ dd / mm / yyyy hh:mm:ss” ,但是它完全没有帮助,因为它在解释时已经错误地解释了该列首先进来。
我是否需要首先将其打开为文本文件,然后自己播放时间戳?还是有更快的方法来完成这项工作。
感谢您的帮助!
答案 0 :(得分:0)
使用以下示例代码作为解决方案。
Sub csvx()
Application.DisplayAlerts = False
strPath = Path & "C:\root\abc.csv"
Workbooks.OpenText Filename:=strPath & strFile, DataType:=xlDelimited, Comma:=True, Local:=True
Selection.AutoFilter
ActiveSheet.Range("A1").Select
ActiveWorkbook.Worksheets(ActiveSheet.Name).AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets(ActiveSheet.Name).AutoFilter.Sort.SortFields.Add Key:=Range _
("C1:C4"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets(ActiveSheet.Name).AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
ActiveWorkbook.Save
ActiveWorkbook.Close
Application.DisplayAlerts = True
End Sub
这是日期列开始到结束的范围,例如C1:C4
示例CSV文件
CSV文件数据
姓名,年龄,日期 ewr,43,20-Mar ewrwe,23,11-十月 星期三,34,11-十一月
答案 1 :(得分:0)
如果您的本地设置使用与您想要的日期格式相同的日期格式,请将Local:=True
限定符添加到Workbook.Open
,以强制日期解释遵循您的要求计算机的本地设置(而不是VBA内置的默认EN-US解释)。
示例:
Set Data_File = Workbooks.Open Filename:="import_File.csv", ReadOnly:=True, Format:=1, Local:=True