如果您想使用sql語法在工作簿中查詢,可以使用ADODB。
我已經包括了一個sub來作爲如何做到這一點的例子。你可以調用所述子象下面這樣:
Call queryTable("select top 100000 * from [Sheet6$A1:AI31]", range("Sheet5!A1"))
這將查詢地處範圍Sheet6$A1:AI31
(第一行是標題)數據和將轉儲開始的左上角單元格是Sheet5!A1
數據。
Sub queryTable(sqlStr As String, destination As Range)
Dim strFile As String
Dim stADO As String
Dim cnt As ADODB.Connection
Dim recordcount As Long
Dim fieldcount As Long
Dim resultrange As Range
Dim mydestination As Range
strFile = ThisWorkbook.FullName
'connection string may need to be altered a little bit depending on your excel version
stADO = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile _
& ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"
Set cnt = New ADODB.Connection
'Running query
With cnt
.CursorLocation = adUseClient
.Open stADO
.CommandTimeout = 0
Set rst = .Execute(sqlStr)
End With
Set mydestination = destination.Cells(1, 1).Offset(1, 0)
'Copying data (not headers) to destination
mydestination.CopyFromRecordset rst
'Setting some important variables
recordcount = rst.recordcount
fieldcount = rst.Fields.Count
Set range_collection = Range(mydestination.Cells(1, 1).Offset(-1, 0), mydestination.Cells(1, 1).Offset(recordcount - 1, fieldcount - 1))
'Copying the headers
For i = 0 To fieldcount - 1
mydestination.Cells(1, 1).Offset(-1, i).value = rst.Fields(i).name
Next i
'Closing everything down
cnt.Close
Set cnt = Nothing
End Sub
我不清楚你想要做什麼:你的標題談論2個不同的數據源,但你的問題只提到1個數據源。你想要做什麼來加入一個100K excel記錄與一個1000K記錄在數據庫中? –
Excel 100k列表是一個數據源... 1m記錄位於DB2數據庫中。 100k ID駐留在1m記錄中,我正在尋找一種方法從DB2記錄集中提取100K記錄。我認爲循環會非常重要,但從下面的評論我可能是錯的。我可以通過任何方式從1m DB2記錄中獲取Excel Sheet中的100k ID,而無需將所有記錄從DB2加載到Excel中,這是我需要做的。 – JustMe
我建議你的db2數據庫中的存儲過程接受一個ID值列表作爲輸入參數。根據您的數據庫中的要求處理值。這將是棘手的,因爲你可能會遇到某種最大允許數量。然後運行適當的查詢。在vba中,讀取帶有id字段的列,調用存儲過程,並對查詢結果進行一些操作。 –