2015-02-09 36 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 
相關問題