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

我需要一个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),并且需要填充这几百个其他10(第11-1列).

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

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

Master是MasterSheet中数据的表名.

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

下面是我的代码和匹配公式阻止它给出所需的结果.

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

预期的结果是以某种方式匹配公式以期望的方式工作.

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

最佳答案 您的代码的问题是这部分:

MATCH(“& Worksheets(”Required_Data_Sheet“).Cells(1,c)&”,

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

>插入单元格引用(例如B3)或
>引号中单元格的值.

以下是方法1的修正的整行:

工作表(“Required_Data_Sheet”).单元格(r,c).Formula =“= VLOOKUP(”& r&“,Master,MATCH(”& Worksheets(“Required_Data_Sheet”).单元格(1,c).地址&“,’Master Sheet’!$A $1:$R $1,0),FALSE)”

以下是方法2的修正的整行:

工作表(“Required_Data_Sheet”).单元格(r,c).Formula =“= VLOOKUP(A”& r&“,Master,MATCH(”“”和& Worksheets(“Required_Data_Sheet”).单元格(1,c )&“”“,’Master Sheet’!$A $1:$R $1,0),FALSE)”

点赞