2015-02-09 87 views
0

我已经下载了一个数据集,详细介绍了1979年1月至2004年12月期间在英格兰报告的所有车祸事件 - 此文件位于csv格式,并且可以理解为非常大(准确地说,是6,224,199行)。由于文件大小超过Excel 2010可以处理的行数,因此我必须将文件拆分为更小的文件才能在Excel中同时打开它。我尝试使用记事本和记事本++,但记事本崩溃,并且Notepad ++拒绝打开如此大的(720MB)文件。我已考虑使用类似Delimit的Excel 替代,但它不支持宏。 现在,忽略大小问题,我需要计算每个月的崩溃总数,并记下它们。有一列用于指定每次崩溃的日期,但行不会根据崩溃日期进行排序。我正在考虑使用CTRL + F来计算具有特定月份/年份值的行数,然后记录每次搜索的结果数量,但考虑到数据跨越了25年,我必须手动搜索并记录从300个月结果。如何计算并记录具有特定月份/年份值的工作表中的行数

+4

您最好使用Access这种文件。导入文本文件很简单 – Jeanno 2015-02-09 21:18:07

+1

在Access中打开它。您的任何问题都可以通过查询来回答。 – Brad 2015-02-09 21:18:30

+0

如果数据在Access中,您仍然可以使用Excel,如果您真的想通过使用外部(Access)数据源的Pivot表 – Brad 2015-02-09 21:19:08

回答

0

我同意Jeanno和Brad的说法,对于这种类型的需求,Access是比Excel更好的工具。但是,我想知道用Excel读取这样一个大文件的尝试是否会有一个现实的持续时间。

我连接了一些大的文本文件来创建一个663 Mb的文件,我认为它足够接近。下面的宏读取文件的每一行,并将其分割为准备分析的字段。注意:我的文件使用“|”作为分隔符而不是“,”。

该宏在100秒内读取7,782,013条记录。 Access仍然是更好的选择,但是如果Access不可用,Excel是可行的。

注意:此宏需要引用“Microsoft脚本运行时”。

Sub ReadAndSplit() 

    Dim FileStream As TextStream 
    Dim FileSysObj As FileSystemObject 
    Dim Line As String 
    Dim LinePart() As String 
    Dim NumLines As Long 
    Dim TimeStart As Double 

    TimeStart = Timer 

    Set FileSysObj = CreateObject("Scripting.FileSystemObject") 
    NumLines = 0 

    ' 1 means open read only 
    Set FileStream = FileSysObj.OpenTextFile(ThisWorkbook.Path & "\Test4.txt", 1) 

    Do While Not FileStream.AtEndOfStream 
    Line = FileStream.ReadLine 
    NumLines = NumLines + 1 
    LinePart = Split(Line, "|") 
    Loop 

    FileStream.Close 

    Debug.Print NumLines 
    Debug.Print Timer - TimeStart 

End Sub 
相关问题