Vlookup Vlookup的结果

时间:2018-01-18 20:22:42

标签: excel vba excel-vba vlookup

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

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

  • 第一步:使用vlookup
  • 中的数据在worksheet1中运行worksheet2
  • 第二步:vlookup在工作表1中生成的结果是使用不同工作表vlookup <的数据在第二个worksheet3中使用的新参考数据/ LI>

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

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

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

此外,On Error Resume Next效果很好,但我想填空“不可用”

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

1 个答案:

答案 0 :(得分: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

请直到您 cant 合理地解决Excel问题,避免使用VBA。