我需要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
预期结果是以某种方式使匹配公式起作用。
您的代码存在以下问题:
MATCH(" & Worksheets("Required_Data_Sheet").Cells(1, c) & ",
它将单元格(1,c)中的值直接插入到不带引号的公式中。这是不正确的Excel公式语法。相反,您应该:
这是方法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] 删除。
我来说两句