簡體   English   中英

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

[英]Query Large Excel File using VBA/SQL

我正在嘗試在VBA中編寫一些SQL代碼以在相對較大的excel文件(500,000行)上執行查詢,在這里我想找到這些給定子類別的總銷售額:

我的數據如下所示:

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

這是SQL查詢的主要標准:

  • 書櫃椅
  • 椅子墊
  • 辦公家具
  • 桌子

對於使用VBA(尤其是VBA中的SQL),我是一個相對較新的人,因此對您的幫助將不勝感激。 謝謝你的時間。

您可以使用Power查詢僅將相關數據(使用過濾條件)從excel文件/ Sql數據庫導入到新excel文件中的數據模型中,然后可以輕松地對該數據模型進行分析。

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文件視為數據源,然后以這種方式查詢它:)

RunQuery(SourceFile作為字符串,Targetrange作為范圍,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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM