Excel Match,索引VLOOKUP多个条件

时间:2019-04-16 18:54:24

标签: excel vba excel-formula

我正在尝试填充一个单元格,并且仅显示不存在的值。如果存在,则显示另一个值。

...但是我无法理解如何做到这一点。

我目前在E列的单元格上放置了以下公式

=INDEX(config!H2:H20,
MATCH(1,
(F4=config!F2:F20)*(VLOOKUP(D4,config!C2:D20,2,FALSE)=config!G2:G20),0))

这符合其他条件,如您在此处看到的。但是,您还可以看到值7被显示两次。我希望它不显示任何使用中的值。

enter image description here 因此,然后我在配置表中添加了一个额外的列,称为“正在使用的房间”,数据来自此列。此列具有一些公式来检查值是否正在使用

=NOT(ISERROR(MATCH(H2,Sheet1!E2:E41,0)))

您可以在此处看到此操作:enter image description here

因此,回到我的工作表1,我认为该公式需要另一个条件来说明如果正在使用的房间 ==假,那么请执行

=INDEX(config!H2:H20,
MATCH(1,
(F4=config!F2:F20)*(VLOOKUP(D4,config!C2:D20,2,FALSE)=config!G2:G20),0))

否则,如果所有房间都为TRUE,则显示“无空”

我尝试使用:

{=INDEX(config!H2:H20,MATCH(1,(F5=config!F2:F20)*("FALSE"=config!J2:J20)*(VLOOKUP(D5,config!C2:D20,2,FALSE)=config!G2:G20),0)) }

但无济于事...

这在Excel公式中是否有可能,还是我需要使用VBA?

我在此处附加了我的excel文档:https://www.dropbox.com/s/crmbbp8esdvnv29/Book1.xlsm?dl=0

1 个答案:

答案 0 :(得分:2)

要实现第一,第二,第三等匹配,您需要切换到SMALL(IF(...或AGGREGATE,以将匹配的行号返回到INDEX,其中 k 参数由本地工作表上已使用的累进COUNTIF或COUNTIFS个值提供。

虽然最终可能会出现一个过于复杂的单个公式,但您使用双重查找匹配列D到config!C:C来返回config!D:D中的值时,可以使用“帮助程序”列以简化条件计数。

将此公式放入M2(可以选择使用;;;的自定义数字格式),然后向下拖动到M2:M20。

=VLOOKUP(D2, config!C:D, 2, FALSE)&F2

现在E2:E20中的公式是

=INDEX(config!H:H,
       AGGREGATE(15, 7, ROW($2:$20)/((config!F$2:F$20=F2)*(config!G$2:G$20=VLOOKUP(D2, config!C:D, 2, FALSE))), 
       COUNTIF(M$2:M2, VLOOKUP(D2, config!C:D, 2, FALSE)&F2)))

在E16中收到错误不要感到惊讶。修复D16中的错字后,此问题将得到纠正。其他所有#NUM个!当您用尽了可能的匹配值时,就会发生错误。