在过去的一年里,我已经熟练掌握了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
效果很好,但我想填空“不可用”
正如我所说,我对此很陌生。我的方法可能不是最有效的,但如果有人可以帮我解决问题/或者可以提出更高效的代码,我将非常感激。
答案 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。