带范围的Excel VBA Vlookup
我有一个vlookup公式,它取A2的值,并返回在单元格O2中的Lookup_表中找到的对应匹配项,该查找将继续对下面的行进行 如何修改此代码以查找a:M中的一系列值,并将结果放在O:AA中?或者我必须手动分别对每一列进行编码吗带范围的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
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
=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),“)”
。从技术上讲,这并不会使单元格为空,而是将一个长度为零的字符串放入其中——但请尝试一下,看看是否适合您。