如何将Excel中的数据与Access数据库进行匹配?

时间:2018-04-24 18:14:53

标签: excel excel-vba ms-access vba

我正在使用Excel和Access 365进行记录。

我有大约100,000个帐号的信息,对于Excel来说,有效处理的帐号太多了。我把它们放入Access。

在Excel中,我有一个大约10个帐号的列表。此列表每天更改。如何从Access到Excel获取帐户信息?如果我能够将所有内容保存在Excel中,我会使用INDEX MATCH,相当于从Access获取信息是什么?

3 个答案:

答案 0 :(得分:4)

我建议在Access中设置Excel链接表,并运行SQL语句。比VBA中的循环简单得多。

  1. 开放式访问
  2. 创建一个链接表到Excel工作表,它只不过是工作表的连接信息;它实际上并不存储工作表中的记录。
  3. 这允许以下内容:

    • 从Access 中 - 运行在Access表和链接的Excel表之间连接数据的查询。您可以保存此类查询,将其用作RecordSource表单或报告等。
    • 从Excel中 - 您可以在Excel中打开ADO连接,并运行加入Access表和链接的Excel工作表的SQL语句。然后,您可以使用Excel 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

这是一个屏幕截图,显示如何创建变量。

enter image description here

我100%确定您可以在Access中运行简单查询并将所述查询的结果导出到Excel。或者,保存该查询,并将对象中的记录导入Excel。当您进入所描述的更大的数据集时,您可能需要考虑使用不同的工具来完成工作。我想到了Python和R.

答案 2 :(得分:0)

这可能需要VBA高效地完成。

循环显示帐号,并为每个帐号查询Access数据库(使用ADO)并仅返回每个帐户所需的数据。