如何在VBA中的vlookup中使用动态匹配公式?

Vikrant Arora

我需要VBA中的代码,该代码等效于Excel中的vlookup内部匹配。有2张纸,一张是MasterSheet,另一张是required_data_sheet。

MasterSheet中有18列,而required_data_sheet中MasterSheet的18列中只有11列(并非所有这11列的顺序都与MasterSheet中的前11列相同)。两张纸的第一列是item_id,它是主键。MasterSheet有45000条记录,Required_data_sheet只有几百行,仅填充了第一列(即项目ID),对于这几百行,还需要填充其他十列(第11-1列)。

我可以在required_data_sheet中使用以下公式从母版表中获取数据,从而得出正确的结果。我只在required_data_sheet的单元格A2中编写此公式,然后在所有单元格中复制相同的公式。

=VLOOKUP($A2,Master,MATCH(B$1,Master[#Headers],0),FALSE)

Master是MasterSheet中数据的表名。

问题是我无法为此编写正确的VBA代码。匹配公式部分中的代码有问题。

以下是我的代码,并且Match公式阻止了它给出期望的结果。

Sub Fetch_Specific_Columns()
    Dim lastrow As Long
    Dim lastcolumn As Integer
    Dim c As Integer
    Dim r As Long

    lastrow = Range("A" & Rows.Count).End(xlUp).row
    lastcolumn = Range("A1").End(xlToRight).Column

    For c = 2 To lastcolumn
        For r = 2 To lastrow
            Worksheets("Required_Data_Sheet").Cells(r, c).Formula = "=VLOOKUP(A" & r & ",Master,MATCH(" & Worksheets("Required_Data_Sheet").Cells(1, c) & ",'Master Sheet'!$A$1:$R$1,0),FALSE)"
        Next r        
    Next c
End Sub

预期结果是以某种方式使匹配公式起作用。

在此处输入图片说明

大卫·N

您的代码存在以下问题:

MATCH(" & Worksheets("Required_Data_Sheet").Cells(1, c) & ",

它将单元格(1,c)中的值直接插入到不带引号的公式中。这是不正确的Excel公式语法。相反,您应该:

  1. 插入单元格引用(例如B3)或
  2. 单元格的值用引号引起来。

这是方法1的更正内容:

Worksheets("Required_Data_Sheet").Cells(r, c).Formula = "=VLOOKUP(A" & r & ",Master,MATCH(" & Worksheets("Required_Data_Sheet").Cells(1, c).Address & ",'Master Sheet'!$A$1:$R$1,0),FALSE)"

这是方法2的更正内容:

Worksheets("Required_Data_Sheet").Cells(r, c).Formula = "=VLOOKUP(A" & r & ",Master,MATCH(""" & Worksheets("Required_Data_Sheet").Cells(1, c) & """,'Master Sheet'!$A$1:$R$1,0),FALSE)"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章