使用VBA / SQL查询大型Excel文件

时间:2016-08-21 20:20:31

标签: sql vba excel-vba excel

我正在尝试在VBA中编写一些SQL代码,以便在相对较大的excel文件(500,000行)上执行查询,在这里我想找到这些给定子类别的总销售额:

我的数据如下:

Order ID|Sales|ProductSubCategory|Region
234324   3400  BookCases          South 
234345   2700  Tables             North

这是SQL Query的主要标准:

  • 书柜椅
  • 主席
  • 办公室家具

我对使用VBA相对较新,尤其是VBA中的SQL,所以任何帮助都会非常感激。谢谢你的时间。

3 个答案:

答案 0 :(得分:0)

您可以使用电源查询将excel文件/ Sql数据库中的相关数据(使用过滤条件)导入新Excel文件中的数据模型,然后可以轻松地对该数据模型进行分析。

答案 1 :(得分:0)

strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" _
               & "Data Source='C:\Path\To\Workbook.xlsm';" _
               & "Extended Properties=""Excel 8.0;HDR=YES;"";"

strSQL = "SELECT * FROM [Sheet1$]" 

您可以将excel文件视为数据源,就像访问文件一样,并以这种方式查询:)

答案 2 :(得分:0)

RunQuery(源文件为字符串,目标范围为范围,strsql为字符串,ColName为布尔值)

Dim dbConnection As ADODB.Connection, rs As ADODB.Recordset
Dim dbConnectionString As String
Dim TargetCell As Range, i As Integer

dbConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}; DBQ=" & SourceFile & ";"

Set dbConnection = New ADODB.Connection
'On Error GoTo InvalidInput
dbConnection.Open dbConnectionString

Set rs = dbConnection.Execute(strsql)
If ColName Then
    Set TargetCell = Targetrange.Cells(1, 1)
    For i = 0 To rs.Fields.count - 1
        TargetCell.Offset(0, i).Formula = rs.Fields(i).Name
        Debug.Print rs.Fields(i).Name
    Next i
    Set TargetCell = Targetrange.Offset(1, 0)
Else
    Set TargetCell = Targetrange.Offset(0, 0)
End If
TargetCell.CopyFromRecordset rs
rs.Close
dbConnection.Close
Set TargetCell = Nothing
Set rs = Nothing
Set dbConnection = Nothing