EXCEL VBA 或 Function VLookup - 基于多个条件来查找值
Posted
技术标签:
【中文标题】EXCEL VBA 或 Function VLookup - 基于多个条件来查找值【英文标题】:EXCEL VBA or Function VLoopup - Based on Multiple Criteria to find the value 【发布时间】:2015-05-07 13:51:52 【问题描述】:我想使用两个条件进行 Vlookup:
-
D 列中的值;
A 列和 G 列中可以近似匹配的数量。
普通的 Vlookup 只返回第一行的值,所以我想到的一个解决方案是同时匹配 Invoice Number 和近似匹配金额。
不知道是不是最好的解决方案,请指教一个更好的,不一定在VBA中,也可以使用INDEX或MATCH函数等。 提前非常感谢!
下面是我一直在尝试的公式,有点像 如果为真,则此值,如果为假,则查找下一个....但我仍在思考如何通过 Vlookup 导航以搜索下一个值,我需要使用 VBA 来解决这个问题吗?! Vlookup based on Multiple Criteria2
【问题讨论】:
为什么这个例子只有最后一行?是因为它是该发票编号按文档日期的最后一条记录吗? 不是,有时候一个发票号有多个记录,比如3条,或者4条记录,这只是简单的情况 请展示您的尝试。有很多方法可以满足您的要求。 【参考方案1】:以下公式应该有效:
=INDEX(G3:G5,SUMPRODUCT(MAX((D3:D5=B3)*ROW(D3:D5)))-3,1)
这只是 Index(Match)
的一个更高级的版本,它被用作 vlookup 的常见替代品。在这种情况下,我们使用 Sumproduct 而不是 Match
来获取符合我们正在寻找的条件的最大行。
添加:在INDEX
的第二个参数中添加了-3
,以便将返回的Row()
调整为Indexed
的实际范围。
【讨论】:
您好 JNevill,感谢您的回答,但它不起作用,我已经用逻辑更新了我的解决方案,您能帮忙看看吗? 我注意到我从该查找中获取发票编号,而是更改了答案中的公式以正确获取金额。如果这不起作用,请告诉我什么不起作用(您收到的错误,或者返回的值不正确)。 好的,你的公式返回错误“#REF”,我发现 Ref 应该是 G3:G5=B3 可能,该条件是我们在该范围内查找发票编号的位置。因此,如果您的发票编号实际上在 G 列中,那么您的更改应该会起作用。 我的意思是这部分MAX((D3:D5=B3)到MAX((G3:G5=B3)以上是关于EXCEL VBA 或 Function VLookup - 基于多个条件来查找值的主要内容,如果未能解决你的问题,请参考以下文章
Excel 在 VBA 中,如何获取 Function 的返回值