Vlookup Vlookup的结果

1 excel vba excel-vba vlookup

在过去的一年里,我已经熟练掌握了Excel,我已准备好进行下一步并开始使用VBA.

我尝试实现以下目标:我想创建一个可以Vlookups从不同数据源运行多个工具的工具,并将所有数据合并为一个综合概述.

  • 步骤一:运行vlookupworksheet1使用来自数据worksheet2
  • 第二步:在工作表1中生成的结果是使用不同工作表的数据vlookup在一秒钟内vlookup使用的新参考数据worksheet3

现在我尝试使用以下代码:

Dim i As Long, r As Long
r = 4
For i = 1 To 10000

On Error Resume Next

Cells(r, 9).Value = WorksheetFunction.VLookup(Cells(r, 7).Value, Sheets("SPdata").Range("A3:V30321"), 9, 0)
Cells(r, 11).Value = WorksheetFunction.VLookup(Cells(r, 7).Value, Sheets("SPdata").Range("A3:V30321"), 11, 0)
Cells(r, 10).Value = WorksheetFunction.VLookup(Cells(r, 9).Value, Sheets("CREBS").Range("C2:D300"), 2, 0)

  r = r + 1
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我尝试使用Cells(r, 9)第三个vlookup中的结果来匹配工作表CREBS中的数据.我遇到的问题是第3个vlookup不会产生任何结果.

此外,On Error Resume Next作品很棒,但我想填补空白"不可用"

正如我所说,我对此很陌生.我的方法可能不是最有效的,但如果有人可以帮我解决问题/或者可以提出更有效的代码,我将非常感激.

Bra*_*ney 5

一些事情:不要使用,On Error Resume Next因为它不仅是一种代码气味(并且是一种刺鼻的气味),但它也会跳过任何可能引起你对bug的注意的错误.

其次,永远不要在一行上声明多个变量.只因为你可以,并不意味着你应该.

第三,您需要限定范围参考.

Cells(r, 9).Value是真的,ActiveSheet.Cells(r, 9).Value并猜测如果ActiveSheet在代码运行时更改会发生什么?

您正在尝试(低效率)使用VBA复制Excel中已经存在的内容.例如,打开一个工作簿并创建一个从开始行到结束行的表(在本例中似乎为4到1004).在VLOOKUP那里输入你的最终公式.看看它是如何自动填充到最后一行,或者是否可以选择覆盖列中的所有单元格?这比在每一行中编写公式快得多,而且效果会更好.

此外,由于所有这些数据都存在于其他工作表中,因此您应该在表中包含此数据,如果这样,您可以使用这些表名.例如,假设每个表的名称与每个表的名称相同.您的VLOOKUP看起来像:

=VLOOKUP([KeyColumn], SPData, Column(SPData[TheDataYouWant]), False) 然后,为了覆盖错误,我们稍作修改:

=IfError(VLOOKUP([KeyColumn], SPData, Column(SPData[TheDataYouWant]), False), "No Results")

相信我,学习如何做有效的第一将帮助你在Excel中会更好.

您需要的只是三个表(请注意我如何说三个,提示,提示),其中第一个表有要计算的数据,第二个表在第一列中使用该数据创建一个键,第三个表查找它.您需要做的就是将原始数据粘贴到第一个表格中,然后填充您对第三个表格感兴趣的键,瞧!

此外,如果您错过了它,您的第三个VLOOKUP尝试根据您的第二个VLOOKUP使用的相同密钥找到一个密钥,因为VLOOKUP要求范围中最左侧的值是查找的关键.如果由于某种原因无法做到这一点,请先学习INDEX/MATCH.

并且,在您无法用Excel合理地解决问题之前,请避免使用VBA.