我需要一个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
预期的结果是以某种方式匹配公式以期望的方式工作.
最佳答案 您的代码的问题是这部分:
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)”