带有范围的 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、动态范围和标题可选
带有空格和范围的 MS Access VBA acImport 工作表名称