如何计算和记录具有特定 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
我下载了一个数据集,其中详细说明了 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