带范围的Excel VBA Vlookup

带范围的Excel VBA Vlookup,excel,vba,vlookup,Excel,Vba,Vlookup,我有一个vlookup公式,它取A2的值,并返回在单元格O2中的Lookup_表中找到的对应匹配项,该查找将继续对下面的行进行 如何修改此代码以查找a:M中的一系列值,并将结果放在O:AA中?或者我必须手动分别对每一列进行编码吗 With Sheets("Example") .Range("O2:O" & .Range("A" & Rows.Count).End(xlUp).Row).Formula = _ "=IF(ISERROR(VLOOKUP(A

我有一个vlookup公式,它取A2的值,并返回在单元格O2中的Lookup_表中找到的对应匹配项,该查找将继续对下面的行进行

如何修改此代码以查找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

假设
查找表
=
“查找表”!答: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


    • 假设
      查找表
      =
      'Lookup\u Table'!答: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


      你能解释得再清楚一点吗?也许可以用截图?我觉得这相当令人困惑。您正在填充范围E2:AX并从A2中获取值?另外,如果(iError(VLOOKUP_Table!B:I,4,FALSE)),0,VLOOKUP(B2,Lookup_Table!B:I,4,FALSE))是多余的,你应该使用类似于
      =IFERROR(VLOOKUP_Table!A:H,4,FALSE),0的东西。
      我感谢你的回答,我添加了一个截图,希望它不那么令人困惑,你能解释得更好一点吗?也许可以用截图?我觉得这相当令人困惑。您正在填充范围E2:AX并从A2中获取值?另外,如果(iError(VLOOKUP_Table!B:I,4,FALSE)),0,VLOOKUP(B2,Lookup_Table!B:I,4,FALSE))是多余的,你应该使用类似于
      =IFERROR(VLOOKUP_Table!A:H,4,FALSE),0的东西。
      我感谢你的回答,我添加了一个截图,希望它不那么令人困惑抱歉,我无法让你的例子工作。我修改了我的问题,并添加了一个屏幕截图来简化问题,这现在更有意义了吗?@user3596788好的,它给了你一条错误消息吗?代码运行正常,但公式/结果错误吗?根据屏幕截图,公式需要将
      A:M
      列(屏幕截图中的工作表上)中的值与工作表
      Lookup\u Table
      中的
      A:H
      列(与屏幕截图中显示的不同的工作表)相匹配,但是公式本身需要在所示的工作表上的
      O:AA
      列中列出,对吗?另外,您真的想用公式填充列中的每一行吗(如果有100万行需要更新/重新计算,则可能会使电子表格速度非常慢)。这是可行的,我最初输入了错误的列范围。关于性能,我预计最多2-3k行,是否有更好的方法?另外,当没有找到匹配项时,如何返回空白而不是0?在我看来,如果代码对您来说运行良好,那么就没有必要进一步优化它。另外,如果要将
      返回空白
      而不是
      0
      ,请尝试将代码中的这一行
      “=Iferror(VLOOKUP(A2,'Lookup\u Table'!$A:$H,4,FALSE),0)”
      更改为
      ”=Iferror(VLOOKUP(A2,'Lookup\u Table'!$A:$H,4,FALSE),“)”
      。从技术上讲,这并不会使单元格变为空白,而是将一个长度为零的字符串放入其中——但请尝试一下,看看是否适合您。很抱歉,我无法让您的示例正常工作。我修改了我的问题,并添加了一个屏幕截图来简化问题,这现在更有意义了吗?@user3596788好的,它给了你一条错误消息吗?代码运行正常,但公式/结果错误吗?根据屏幕截图,公式需要将
      A:M
      列(屏幕截图中的工作表上)中的值与工作表
      Lookup\u Table
      中的
      A:H
      列(与屏幕截图中显示的不同的工作表)相匹配,但是公式本身需要在所示的工作表上的
      O:AA
      列中列出,对吗?另外,您真的想用公式填充列中的每一行吗(如果有100万行需要更新/重新计算,则可能会使电子表格速度非常慢)。这是可行的,我最初输入了错误的列范围。关于性能,我预计最多2-3k行,是否有更好的方法?另外,当没有找到匹配项时,如何返回空白而不是0?在我看来,如果代码对您来说运行良好,那么就没有必要进一步优化它。另外,如果要将
      返回空白
      而不是
      0
      ,请尝试将代码中的这一行
      “=Iferror(VLOOKUP(A2,'Lookup\u Table'!$A:$H,4,FALSE),0)”
      更改为
      ”=Iferror(VLOOKUP(A2,'Lookup\u Table'!$A:$H,4,FALSE),“)”
      。从技术上讲,这并不会使单元格为空,而是将一个长度为零的字符串放入其中——但请尝试一下,看看是否适合您。