带通配符的Excel数组公式

时间:2017-01-11 12:30:33

标签: excel array-formulas

我有一个数组公式,它引用一个下拉单元格($ AG $ 7)来确定要评估的单元格。这很有效,但是,我需要在下拉列表中包含一个额外的项目,即" All"。

选择此项后,我希望数组公式使用" *"从数组中返回所有实例,但我无法使其工作。

这是我目前正在使用的公式;

={SUM(IF((tblSkillsMatrix[Role]=[@Role])*(INDIRECT("tblSkillsMatrix["&V$2&"]")=$AG$7),1,0))}

我尝试过使用

={SUM(IF((tblSkillsMatrix[Role]=[@Role])*(INDIRECT("tblSkillsMatrix["&V$2&"]")="*"&$AG$7),1,0))}

={SUM(IF((tblSkillsMatrix[Role]=[@Role])*(INDIRECT("tblSkillsMatrix["&V$2&"]")="*"&$AG$7&"*"),1,0))}

但这些都不起作用。

有人有什么想法吗?

由于

1 个答案:

答案 0 :(得分:2)

显式=比较不能使用通配符。 COUTIFSSUMIFS可以。据我所知,你只想计算(条件和1和0)。

问题是,COUTIFSSUMIFS不会处理INDIRECT范围。但是INDIRECT可以而且应该(由于其不稳定的行为)经常被INDEX - MATCH取代。

所以:

=COUNTIFS(tblSkillsMatrix[role],[@role],INDEX(tblSkillsMatrix,,MATCH($V$2,tblSkillsMatrix[#Headers],0)),"*"&$AG$7)

如果$AG$7为空,则其计数与$V$2中指定的列无关。

Btw。:在表格(ListObject)中,不需要输入数组公式。

这不是100%替换您的公式,因为如果$V$2为空,它不起作用,因此没有给出表列标题。然后,您的公式将查看所有列,但这不可能使用COUNTIFS,其中每个附加范围必须与criteria_range1参数具有相同的列数。因此,如果$V$2也可以为空,那么这将无效。

如果是,那么你可以使用

{=SUM((tblSkillsMatrix[role]=[@role])*(LEFT(INDIRECT("tblSkillsMatrix["&$V$2&"]"),LEN($AG$7))=$AG$7))}

优势:$V$2$AG$7都可以为空。

缺点:INDIRECT的动态行为,即使在ListObject表中,此公式也必须是数组公式。必须使用 Ctrl + Shift + 输入确认。