VBA 整列的 vlookup
VBA vlookup for entire column
我是 VBA 的新手,这是我第一次在这里发帖。我正在尝试获取一个宏来添加两列,这些列使用 vlookup 从另一个工作簿中查找值。最终我想让宏循环遍历整个文件夹的文件来处理,所以我不能在同一个工作簿上有工作表。
到目前为止我有:
Range("K1:L1").EntireColumn.Insert
Range("K1") = "Rank"
Range("L1") = "Distance"
Range("K2:K" & Range("A" & Rows.Count).End(xlUp).Row).Formula = Application.VLookup(Range(ActiveCell.Offset(0, -9)), Workbooks("SOSP.nearestGHCND.simple.xlsx").Worksheets("Sheet1").Range("D:F"), 2, False)
我认为参考文献有问题,但我很难找到如何在线正确格式化它。还有
如果您能提供任何帮助,我们将不胜感激。
非常感谢!
当询问 [=18=]'...如何让它更快?' 时,最好包含尽可能多的信息。将外部工作簿的 加载到变量中应该会有所帮助,但根据行数,循环遍历它们仍然需要一些时间。
Dim lr As Long, rw As Long, extRNG As Range
'the following assumes that SOSP.nearestGHCND.simple.xlsx is open
Set extRNG = Workbooks("SOSP.nearestGHCND.simple.xlsx").Worksheets("Sheet1").Range("D:F")
lr = Range("A" & Rows.Count).End(xlUp).Row
Range("K:L").EntireColumn.Insert
Range("K1:L1") = Array("Rank", "Distance")
For rw = 2 To lr
Cells(rw, 11) = Application.VLookup(Cells(rw, 2), extRNG, 2, False)
Next rw
Set extRNG = Nothing
为避免循环,您可以将公式批量写入整列,但外部引用会减慢公式的速度。您可能会开始将范围(例如 和 )加载到数组中并以这种方式处理然后 return 将这些值一起返回到工作表。超过 ~65K 行的任何内容都可能必须转置。没有提及如何处理 L 列。数据的性质(数字、文本和其他)是一个考虑因素。期望找到值的时间百分比是另一个考虑因素。
具有预期结果的样本数据是最好的资源。请参阅 How to create a Minimal, Complete, and Verifiable example. Another option is to get it working to some level of satisfaction and then repost the working code at SE's Code Review 并就可以改进的地方寻求建议。
我是 VBA 的新手,这是我第一次在这里发帖。我正在尝试获取一个宏来添加两列,这些列使用 vlookup 从另一个工作簿中查找值。最终我想让宏循环遍历整个文件夹的文件来处理,所以我不能在同一个工作簿上有工作表。
到目前为止我有:
Range("K1:L1").EntireColumn.Insert
Range("K1") = "Rank"
Range("L1") = "Distance"
Range("K2:K" & Range("A" & Rows.Count).End(xlUp).Row).Formula = Application.VLookup(Range(ActiveCell.Offset(0, -9)), Workbooks("SOSP.nearestGHCND.simple.xlsx").Worksheets("Sheet1").Range("D:F"), 2, False)
我认为参考文献有问题,但我很难找到如何在线正确格式化它。还有
如果您能提供任何帮助,我们将不胜感激。 非常感谢!
当询问 [=18=]'...如何让它更快?' 时,最好包含尽可能多的信息。将外部工作簿的
Dim lr As Long, rw As Long, extRNG As Range
'the following assumes that SOSP.nearestGHCND.simple.xlsx is open
Set extRNG = Workbooks("SOSP.nearestGHCND.simple.xlsx").Worksheets("Sheet1").Range("D:F")
lr = Range("A" & Rows.Count).End(xlUp).Row
Range("K:L").EntireColumn.Insert
Range("K1:L1") = Array("Rank", "Distance")
For rw = 2 To lr
Cells(rw, 11) = Application.VLookup(Cells(rw, 2), extRNG, 2, False)
Next rw
Set extRNG = Nothing
为避免循环,您可以将公式批量写入整列,但外部引用会减慢公式的速度。您可能会开始将范围(例如
具有预期结果的样本数据是最好的资源。请参阅 How to create a Minimal, Complete, and Verifiable example. Another option is to get it working to some level of satisfaction and then repost the working code at SE's Code Review 并就可以改进的地方寻求建议。