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 的返回值

VBA基础 - 函数和模块

vbscript VBA - Excel - Hack受保护的Excel文档或表格(VBA) - 代码

excel vba中将公式转为文本或数值公式

EXCEL VBA 隐藏了工作表,加密的,如何显示或破解

Excel VBA“公式”函数