如何计算和记录具有特定月/年值的工作表中的行数

时间:2015-02-09 21:13:53

标签: excel vba excel-vba dataset

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

1 个答案:

答案 0 :(得分:0)

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

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

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

注意:此宏需要引用" Microsoft Scripting Runtime"。

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