Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA使用SQL语句操作大型csv文件_Excel_Vba - Fatal编程技术网

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

Excel VBA使用SQL语句操作大型csv文件,excel,vba,Excel,Vba,我不确定这个问题是否合理/愚蠢或不够具体。请告知 我需要创建一个excel宏,该宏将输出满足特定条件的大型csv文件的一部分 例如,在csv中,有一个包含2000万左右电话号码的列表以及其他列(城市、性别等)。我想让用户输入这些标准,并输出一个新的csv文件的结果或在一个新的标签 有没有办法用熊猫或类似SQL的语句查询csv文件?比如df[df[city]='CA'] 我想能够分发这个宏,所以如果有可能的话,不必安装一些数据库 如果这是可能的,与安装SQL数据库(例如)相比,这有多高效/低效 谢

我不确定这个问题是否合理/愚蠢或不够具体。请告知

我需要创建一个excel宏,该宏将输出满足特定条件的大型csv文件的一部分

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

有没有办法用熊猫或类似SQL的语句查询csv文件?比如
df[df[city]='CA']

我想能够分发这个宏,所以如果有可能的话,不必安装一些数据库

如果这是可能的,与安装SQL数据库(例如)相比,这有多高效/低效


谢谢

一个选项是使用ADO将CSV文件作为记录集读取。这将允许您使用记录集的.Filter属性应用用户的筛选器

对另一个问题的回答显示了如何将文件作为记录集打开:


您需要检查这对内存的占用情况,因为您已经指出您的CSV文件将非常大。

一个选项是使用ADO将CSV文件作为记录集读取。这将允许您使用记录集的.Filter属性应用用户的筛选器

对另一个问题的回答显示了如何将文件作为记录集打开:


您需要检查这对内存的占用情况,因为您已经指出您的CSV文件将非常大。

您应该有一些可用的选项。考虑下面的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
文件看起来像这样

在代码运行之后,您将得到这个

另外,请参见下面的链接

最后,考虑使用电源枢轴,这是一个免费插件。


您应该有一些选择。考虑下面的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
文件看起来像这样

在代码运行之后,您将得到这个

另外,请参见下面的链接

最后,考虑使用电源枢轴,这是一个免费插件。