我正在使用Excel和Access 365进行记录。
我有大约100,000个帐号的信息,对于Excel来说,有效处理的帐号太多了。我把它们放入Access。
在Excel中,我有一个大约10个帐号的列表。此列表每天更改。如何从Access到Excel获取帐户信息?如果我能够将所有内容保存在Excel中,我会使用INDEX MATCH,相当于从Access获取信息是什么?
答案 0 :(得分:4)
我建议在Access中设置Excel链接表,并运行SQL语句。比VBA中的循环简单得多。
这允许以下内容:
RecordSource
表单或报告等。Range.CopyFromRecordset
方法将这些结果粘贴到Excel工作表中。答案 1 :(得分:1)
听起来你需要使用'In'子句。我在A1范围内的Sheet2上有以下数据点:A5。
Ryan
Sam
Timmy
Tommy
Teddy
将下面的代码粘贴到模块中,并在VBE窗口的工具下设置对“Microsoft Active X Data Objects 2.8 Library”的引用。
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.
答案 2 :(得分:0)
这可能需要VBA高效地完成。
循环显示帐号,并为每个帐号查询Access数据库(使用ADO)并仅返回每个帐户所需的数据。