VBA使用SQL语句操作大型csv文件

时间:2018-06-06 01:16:04

标签: excel vba

我不确定这个问题是否有意义/是愚蠢还是不够具体。请指教。

我需要创建一个excel宏,它将输出符合特定条件的大型csv文件的一部分。

例如,在csv中,有一个包含20m左右电话号码的列表,其中包含其他列(城市,性别,...)。我想让用户输入这些标准,并输出一个带有结果的新csv文件或者在新标签中。

有没有办法用pandas或SQL语句查询csv文件?与df[df[city] == 'CA']一样。

我希望能够分发这个宏,所以如果可以不用安装某个数据库就可以。

如果可以,与安装SQL数据库相比,这有多高效/低效?

由于

2 个答案:

答案 0 :(得分:2)

一种选择是使用ADO将CSV文件作为记录集读取。这样您就可以使用记录集的.Filter属性来应用用户的过滤器。

这个对另一个问题的回答显示了如何将文件作为记录集打开: https://stackoverflow.com/a/11637197/9542263

您需要检查内存密集程度,因为您已指出CSV文件非常大。

答案 1 :(得分:0)

您应该有一些可用的选择。考虑下面的VBA代码。

Sub TryThis()
Dim sSQLQry As String
Dim ReturnArray

Dim Conn As New ADODB.Connection
Dim mrs As New ADODB.Recordset

Dim DBPath As String, sconnect As String

DBPath = "C:\Users\Excel\Desktop\"

sconnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBPath & ";Extended Properties='text;HDR=YES;FMT=Delimited'"

Conn.Open sconnect
    sSQLSting = "SELECT * From CSV1.csv WHERE ID = 2"
    mrs.Open sSQLSting, Conn
        ActiveSheet.Range("A2").CopyFromRecordset mrs
    'Close Recordset
    mrs.Close

Conn.Close

End Sub

文件看起来像这样。

enter image description here

代码运行后,您会得到这个。

enter image description here 另外,请参见下面的链接。

https://blogs.technet.microsoft.com/josebda/2017/02/12/loading-csvtext-files-with-more-than-a-million-rows-into-excel/

最后,考虑使用Power Pivot,它是一个免费的插件。

https://professor-excel.com/how-to-work-with-large-data-and-powerpivot/