【问题标题】:VBA match value from from workbook A & B, return another value from workbook B来自工作簿 A 和 B 的 VBA 匹配值,从工作簿 B 返回另一个值
【发布时间】:2017-08-10 09:18:14
【问题描述】:

我有 2 个工作簿 A 和 B。

工作簿 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

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

请帮忙。谢谢

【问题讨论】:

  • 请编辑您的问题以显示您尝试过的代码。
  • 嗨 YowE3K。谢谢提醒。我已经添加了代码。我很抱歉我对 vba 和这个网站还是很陌生

标签: vba excel vlookup


【解决方案1】:

有了如此庞大的数据,我建议您研究一下 PowerQuery,它包含在 Excel 2016 中,并且自 Excel 2010 起作为插件提供。

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

将两个表添加到 Power Query(Excel 2016:“数据”功能区 -->“获取和转换”部分 -->“从表”或“新查询”->“从工作簿”)

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

选择要添加到表格中的列

然后单击“保存并加载到”并选择合并表的目标。

这是非常高效的,通过单击“全部刷新”将使新表保持同步。

附:我会发布更多图片,但没有“声誉”

最好的

弗洛里安

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 2014-12-09
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多