Звучит так, как будто вам нужно использовать предложение «In». У меня есть следующие данные на листе 2 в диапазоне A1: A5.
Ryan
Sam
Timmy
Tommy
Teddy
Вставьте приведенный ниже код в модуль и установите ссылку на «Microsoft Active X Data Objects 2.8 Library» в разделе «Инструменты» в окне VBE.
Sub Import()
Dim connect As ADODB.Connection
Dim rec1 As ADODB.Recordset
Dim wb As Worksheet
Dim Wb2 As Worksheet
Dim Param() As ADODB.Parameter
Dim Command1 As ADODB.Command
Dim lrow As Integer
Dim i As Integer
Dim ConcatSQL As String
Set wb = ActiveWorkbook.Sheets("Sheet1")
Set Wb2 = ActiveWorkbook.Sheets("Sheet2")
lrow = Wb2.Range("A" & Wb2.Rows.Count).End(xlUp).Row
'Concatenate desired range into one cell
For i = 0 To lrow
ConcatSQL = ConcatSQL & "'" & Wb2.Cells(i + 1, 1) & "'" & ","
Next i
ConcatSQL = "(" & Left(ConcatSQL, Len(ConcatSQL) - 1) & ")"
'Open Command Object with One Paramter
Set Command1 = New ADODB.Command
With Command1
.CommandText = " Select ID, Price from TABLE where ID IN " & ConcatSQL
.CommandType = adCmdText
.CommandTimeout = 600
End With
'Connect to Data Source
Set connect = GetNewConnection 'Represents Private Function with Connection String
Command1.ActiveConnection = connect
Set rec1 = New ADODB.Recordset
Set rec1 = Command1.Execute()
'Paste Results
wb.Activate
With wb.QueryTables.Add(Connection:=rec1, Destination:=wb.Range("A1"))
.Name = "data"
.FieldNames = True
.Refresh BackgroundQuery:=False
End With
'Close Connections
rec1.Close
connect.Close
Set rec1 = Nothing
Set connect = Nothing
End Sub
Вот снимок экрана, показывающий, как создаются переменные.
Я на 100% уверен, что вы можете выполнить простой запрос в Access и экспортировать результаты этого запроса в Excel. Или сохраните этот запрос и импортируйте записи объекта в Excel. Когда вы получаете большие наборы данных, как вы описали, вы можете рассмотреть возможность использования различных инструментов для работы. Python и R приходят на ум.