在Excel中处理大型.csv文件的最佳方法?

时间:2018-04-24 11:04:36

标签: excel vba excel-vba

我必须使用Excel对大约80-100mb的.csv文件进行数据分析。为了加快这个过程,我试图创建一个工具来自动化这个过程,但是当它处理大量数据(大约500k行)时,它的速度非常慢。试图最初读取文件。

有人有任何我可以使用的建议吗?我目前正在使用一个按钮供用户选择并加载文件。我已经将我的代码放在下面了。

Dim ws As Worksheet, fileNm As String, fileName As String

Dim FSO As Scripting.FileSystemObject

Set FSO = New FileSystemObject

Set ws = ActiveWorkbook.Sheets("CSV Data")

fileNm = Application.GetOpenFilename("CSV Files  (*.csv),*.csv", , "Please select CSV file...")

If fileNm = "False" Then

    Exit Sub

Else

With ws.QueryTables.Add(Connection:="TEXT;" & fileNm, Destination:=ws.Range("A1"))
    .TextFileParseType = xlDelimited
    .TextFileCommaDelimiter = True
    .Refresh
End With

End If

2 个答案:

答案 0 :(得分:1)

我建议你研究一下PowerQuery。它旨在将大数据加载和操作到Excel。

转到Data功能区,然后点击"Get Data"-->"From File"-->"From Text/CSV"

在即将出现的窗口中选择您的文件并单击“导入”。在新窗口中,您可以选择“加载”,这将按原样导入数据,或“编辑”,您应该这样做。

现在您处于PowerQuery编辑器中,您可以在其中操作数据,例如重命名列,删除/添加列,更改类型或数学运算。

有关强力查询可以及其工作原理的概述,请参阅https://www.excelcampus.com中的此说明,该说明通常包含很好的教程。

对于Power Query,请转到here

答案 1 :(得分:1)

至少就将数据加载到Excel而言,如果您不需要实时连接数据,则执行以下操作可能更有效:

  1. 打开与文本文件的ADO连接
  2. 对文本文件执行SQL语句,返回ADO记录集。您还可以只包含特定列,或者在返回数据之前使用SQL语句重新整形数据(过滤,分组,排序)
  3. 使用Excel的CopyFromRecordset方法将数据粘贴到工作表中
  4. this类似的东西;即使源是另一个Excel工作簿,原理也是一样的。

    关于您提到的其他问题:

    • 删除列 - 您的SQL语句只能选择您需要的列
    • 为某些行着色 - 也许条件格式可能更有效?