来自工作簿A&的VBA匹配值B,从工作簿B返回另一个值

时间:2017-08-08 09:19:41

标签: vba excel-vba vlookup excel

我有2本工作簿A&乙

工作簿A是客户发票清单(5000行)。客户ID位于A列。 工作簿B是客户详细信息,包括15000行和100列。客户ID位于B列。

使用客户ID,我尝试将工作簿B中的D,E,G,O,AA,AD,AF,BD,CA(客户地址,电话,电子邮件)中的数据复制到工作簿A列F到N.

我一直在使用vlookup,但由于数据每天都刷新而且耗时太长,我需要一次又一次地重新输入公式。

我尝试使用VBA循环功能,但它超时(数据太大)。我试过各种各样的方法,比如匹配功能我似乎无法得到结果。

以下是我试过的代码。对不起,我是VBA的新手。我认为这种大数据不鼓励双循环。客户数据有100列和14000行,发票有3000行

Sub CustomerData()

Dim r As Long
Dim r1 As Long
Dim sheet1 As Worksheet
Dim sheet2 As Worksheet

Dim FilePath1 As String
FilePath1 = Range("Q1").Value

Workbooks.Open (FilePath1 & "invoice.xlsx")
Workbooks.Open (FilePath1 & "customer.xls")
Set sheet1 = Workbooks("customer.xls").Worksheets("Customers")
Set sheet2 = Workbooks("invoice.xlsx").Worksheets("unpaid_invoices")

r = 0

Do
    r1 = 0
    Do
        If sheet2.Range("A1").Offset(r, 0) = sheet1.Range("B1").Offset(r1, 0) Then
        sheet2.Range("A1").Offset(r, 13) = sheet1.Range("B1").Offset(r1, 8)
        sheet2.Range("A1").Offset(r, 14) = sheet1.Range("B1").Offset(r1, 9)
        sheet2.Range("A1").Offset(r, 15) = sheet1.Range("B1").Offset(r1, 38)
        sheet2.Range("A1").Offset(r, 16) = sheet1.Range("B1").Offset(r1, 64)
        sheet2.Range("A1").Offset(r, 17) = sheet1.Range("B1").Offset(r1, 25)
        sheet2.Range("A1").Offset(r, 18) = sheet1.Range("B1").Offset(r1, 39)
        sheet2.Range("A1").Offset(r, 19) = sheet1.Range("B1").Offset(r1, 41)
        sheet2.Range("A1").Offset(r, 20) = sheet1.Range("B1").Offset(r1, 44)
        sheet2.Range("A1").Offset(r, 21) = sheet1.Range("B1").Offset(r1, 78)
        sheet2.Range("A1").Offset(r, 22) = sheet1.Range("B1").Offset(r1, 99)
        sheet2.Range("A1").Offset(r, 23) = sheet1.Range("B1").Offset(r1, 100)
        End If
    r1 = r1 + 1
    Loop Until sheet1.Range("B1").Offset(r1, 0).Value = ""
r = r + 1
Loop Until sheet2.Range("A1").Offset(r, 0).Value = ""
End Sub

我一直在网站上搜索一天,我似乎无法得到我想要的东西。如果有人能指出我正确的方向,我会很高兴

请帮忙。谢谢

1 个答案:

答案 0 :(得分:0)

有了这么大的数据,我建议您查看PowerQuery,它包含在Excel 2016中,自Excel 2010以来可以作为AddIn使用。

First Table called "Invoices", Second called "Details"

将两个表添加到Power Query(Excel 2016:" Data" Ribbon - >" Get& Transform" Section - >" From Table&# 34;或"新查询" - >"来自工作簿")

And then in Power Query Editor use "Merge Queries":

选择要添加到表格中的列

然后点击"保存并加载到"并选择合并表的目标。

这是非常高效的,点击"全部刷新"将保持新表同步。

P.S。我会发布更多图片,但没有"声誉"

最佳

Florian