如何计算和记录具有特定 month/year 值的 sheet 中的行数

How can I count and log the number of rows in a sheet with a specific month/year value

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

我同意 Jeanno 和 Brad 的观点,对于此类要求,Access 是比 Excel 更好的工具。但是,我想知道用 Excel 读取如此大的文件的尝试是否具有现实的持续时间。

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

宏在 100 多秒内读取了 7,782,013 条记录。 Access 仍然是更好的选择,但如果 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