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 并就可以改进的地方寻求建议。