在过去的一年里,我已经非常熟练地掌握了Excel,我已经做好了下一步的准备,并开始使用VBA。
我试图实现以下目标:我希望创建一个可以从不同数据源运行多个Vlookups的工具,并将所有数据合并成一个全面的概述。
vlookup的数据在worksheet1中运行worksheet2vlookup生成的结果,是使用不同工作表worksheet3的数据在第二个vlookup中使用的新引用数据。现在,我尝试使用以下代码:
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)结果来匹配来自sheet CREBS的数据。我遇到的问题是,第三个vlookup不会产生任何结果。
此外,On Error Resume Next工作得很好,但我想用“不可用”来填补空白。
就像我说的,我对这件事很陌生。而且我的方法可能不是最有效的,但是如果有人能帮助我解决问题/或者建议一个更有效的代码,我将非常感激。
发布于 2018-01-18 20:38:30
有几件事:不要使用On Error Resume Next,因为它不仅是一种代码气味(也是一种刺鼻的),而且它还会跳过任何错误,否则会引起您对bug的注意。
第二,不要在一行上声明多个变量。仅仅因为你能,并不意味着你应该。
第三,你需要限定你的参考范围。
Cells(r, 9).Value实际上是ActiveSheet.Cells(r, 9).Value,如果代码运行时ActiveSheet发生了变化,会发生什么情况?
您正在尝试(低效率)使用VBA复制Excel中已经存在的内容。例如,打开一个工作簿并创建一个从起始行到最终行的表(在本例中似乎是4到1004 )。在那里输入最后的VLOOKUP公式。看看它是如何自动填充到最后一行的,还是为您提供了覆盖列中所有单元格的选项?这比在每一行中编写公式要快得多,比要快得多,而且会工作得更好。
此外,由于所有这些数据都存在于其他工作表中,所以应该将这些数据放在表中,如果存在,则可以使用这些表名。例如,假设每个表的名称与每个工作表相同。您的VLOOKUP看起来类似于:
然后,为了覆盖错误,我们做了一个小小的修改:
=IfError(VLOOKUP([KeyColumn], SPData, Column(SPData[TheDataYouWant]), False), "No Results")
相信我,学习如何有效地完成first将帮助您更好地掌握Excel。
然后,您需要的是三个表(注意我是如何说3,提示,提示),其中第一个表有要计算的数据,第二个表用该数据在第一列中创建一个键,第三个表将查找该数据。然后,您所需要做的就是将原始数据粘贴到您的第一个表中,然后填充您感兴趣的第三个表的键,并查看!
另外,如果您错过了它,您的第三个VLOOKUP将尝试根据第二个VLOOKUP使用的相同键查找a键,因为VLOOKUP需要一个范围中的最左边值作为查找的键。如果你不能做到这一点,无论出于什么原因,首先要学习INDEX/MATCH。
并且,除非无法合理地解决问题,否则请避免使用。
https://stackoverflow.com/questions/48329699
复制相似问题