带有范围的 Excel VBA Vlookup

Posted

技术标签:

【中文标题】带有范围的 Excel VBA Vlookup【英文标题】:Excel VBA Vlookup with Ranges 【发布时间】:2018-11-14 02:10:51 【问题描述】:

我有 vlookup 公式,它采用 A2 的值并返回在单元格 O2 中的 Lookup_Table 中找到的相应匹配项,此查找将继续查找下面的行。

如何修改此代码以在 A:M 中查找一系列值,并将结果放在 O:AA 中?还是我必须单独手动编码每一列?

  With Sheets("Example")
    .Range("O2:O" & .Range("A" & Rows.Count).End(xlUp).Row).Formula = _
        "=IF(ISERROR(VLOOKUP(A2,'Lookup_Table'!A:H,4,FALSE)),0,VLOOKUP(A2,'Lookup_Table'!A:H,4,FALSE))"
           .Range("O2:O" & .Range("A" & Rows.Count).End(xlUp).Row).Value = _
        .Range("O2:O" & .Range("A" & Rows.Count).End(xlUp).Row).Value 'Comment out if you'd like to leave the above formula in place
End With

【问题讨论】:

你能解释得更好一点吗——也许用截图?我觉得它相当混乱。您正在填充范围 E2:AX 并从 A2 中获取值?此外,您的公式 =IF(ISERROR(VLOOKUP(B2,Lookup_Table!B:I,4,FALSE)),0,VLOOKUP(B2,Lookup_Table!B:I,4,FALSE)) 是多余的,您应该使用类似 =IFERROR(VLOOKUP(A2,Lookup_Table!A:H,4,FALSE),0) 感谢您的回复,我添加了一个截图,希望它不那么混乱 【参考方案1】:

假设Lookup_Table = 'Lookup_Table'!A:H,您可以尝试以下操作:

With worksheets("Cross_Walk") ' Assumes Activeworkbook
    .Range("E2:H" & .Range("A" & .Rows.Count).End(xlUp).Row).Formula = _
        "=Iferror(VLOOKUP(A2,'Lookup_Table'!$A:$H,4,FALSE),0)"
    End With

我们将公式分配给范围E2:H?,其中? 是确定的最后一行。

将相同的公式分配给单元格区域时,Excel 会观察相对引用和绝对引用。

因此,由于 VLOOKUP 中的 A2 具有相对的行和列引用(没有 $ 符号),因此当在 F2 中输入公式时,它将更改为 B2 -- 以此类推剩余的列和行。

另外,如果您要测试 VLOOKUP 的结果是否错误,然后有条件地分配零或匹配值,您也可以只在公式中使用 IFERROR -- 而不是执行两次 VLOOKUP。

【讨论】:

抱歉,我无法让您的示例正常工作。我修改了我的问题并添加了一个屏幕截图以简化问题,现在这是否更有意义? @user3596788 好的,它有没有给你一个错误信息?代码运行正常但公式/结果错误吗?根据屏幕截图,公式需要将列A:M(在屏幕截图中的工作表上)中的值与工作表Lookup_Table 的列A:H(与屏幕截图中显示的工作表不同)匹配,但公式本身需要在显示的工作表上的列O:AA 中输入——对吗?此外,您真的想用公式填充列中的每一行吗(如果有 100 万行要更新/重新计算,它可能会使电子表格变得非常慢)。 它工作我最初输入了错误的列范围。关于性能,我预计最多 2-3k 行是否有更好的方法?另外,找不到匹配项时如何返回空白而不是 0? 在我看来,如果代码适合你,那么没有必要进一步优化它。另外,如果您想返回blank 而不是0,请尝试将代码中的这一行"=Iferror(VLOOKUP(A2,'Lookup_Table'!$A:$H,4,FALSE),0)" 更改为"=Iferror(VLOOKUP(A2,'Lookup_Table'!$A:$H,4,FALSE),"""")"。从技术上讲,这不会使单元格变为空白,它会在其中放入一个长度为零的字符串 - 但请尝试一下,看看它是否适合您。

以上是关于带有范围的 Excel VBA Vlookup的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA 从关闭的工作簿中读取数据,带有 ADODB、动态范围和标题可选

VBA Excel小计动态范围不起作用

带有空格和范围的 MS Access VBA acImport 工作表名称

从 Excel 与 VBA 调用时,VBA UDF 给出不同的答案

Excel VBA:获取单击按钮的行[重复]

如何自动填充公式 VBA