Excel 带通配符的数组公式
Excel array formula with wildcard
我有一个数组公式,它引用下拉单元格 ($AG$7) 来确定要评估的单元格。这很好用,但是,我需要在下拉列表中添加一个额外的项目,即 "All".
选择此项后,我希望数组公式对 return 数组中的所有实例使用“*”,但我无法让它工作。
这是我目前使用的公式;
={SUM(IF((tblSkillsMatrix[Role]=[@Role])*(INDIRECT("tblSkillsMatrix["&V&"]")=$AG),1,0))}
我试过使用
={SUM(IF((tblSkillsMatrix[Role]=[@Role])*(INDIRECT("tblSkillsMatrix["&V&"]")="*"&$AG),1,0))}
和
={SUM(IF((tblSkillsMatrix[Role]=[@Role])*(INDIRECT("tblSkillsMatrix["&V&"]")="*"&$AG&"*"),1,0))}
但是这些都不管用。
有人有什么想法吗?
谢谢
显式 =
比较不能使用通配符。 COUTIFS
和 SUMIFS
可以。据我所知,您只想计算(条件总和 1 和 0)。
问题是,COUTIFS
和 SUMIFS
不会处理 INDIRECT
范围。但是 INDIRECT
可以而且应该(因为其不稳定的行为)经常被 INDEX
- MATCH
取代。
所以:
=COUNTIFS(tblSkillsMatrix[role],[@role],INDEX(tblSkillsMatrix,,MATCH($V,tblSkillsMatrix[#Headers],0)),"*"&$AG)
如果 $AG
为空,则它独立于 $V
中指定的列进行计数。
顺便说一句:在 table (ListObject) 中,这不需要作为数组公式输入。
这不是您公式的 100% 替换,因为如果 $V
为空并且没有给出 table 列标题,它就不起作用。然后,您的公式将查看所有列,但使用 COUNTIFS
是不可能的,其中每个附加范围必须具有与 criteria_range1 参数相同的列数。所以如果 $V
也可以为空,那么这将不起作用。
如果是这样,那么您可以使用
{=SUM((tblSkillsMatrix[role]=[@role])*(LEFT(INDIRECT("tblSkillsMatrix["&$V&"]"),LEN($AG))=$AG))}
优点:$V
和$AG
都可以为空。
缺点:INDIRECT
的易变行为,因此即使在 ListObject-table 中,此公式也必须是数组公式。必须使用Ctrl+Shift+Enter.
确认
我有一个数组公式,它引用下拉单元格 ($AG$7) 来确定要评估的单元格。这很好用,但是,我需要在下拉列表中添加一个额外的项目,即 "All".
选择此项后,我希望数组公式对 return 数组中的所有实例使用“*”,但我无法让它工作。
这是我目前使用的公式;
={SUM(IF((tblSkillsMatrix[Role]=[@Role])*(INDIRECT("tblSkillsMatrix["&V&"]")=$AG),1,0))}
我试过使用
={SUM(IF((tblSkillsMatrix[Role]=[@Role])*(INDIRECT("tblSkillsMatrix["&V&"]")="*"&$AG),1,0))}
和
={SUM(IF((tblSkillsMatrix[Role]=[@Role])*(INDIRECT("tblSkillsMatrix["&V&"]")="*"&$AG&"*"),1,0))}
但是这些都不管用。
有人有什么想法吗?
谢谢
显式 =
比较不能使用通配符。 COUTIFS
和 SUMIFS
可以。据我所知,您只想计算(条件总和 1 和 0)。
问题是,COUTIFS
和 SUMIFS
不会处理 INDIRECT
范围。但是 INDIRECT
可以而且应该(因为其不稳定的行为)经常被 INDEX
- MATCH
取代。
所以:
=COUNTIFS(tblSkillsMatrix[role],[@role],INDEX(tblSkillsMatrix,,MATCH($V,tblSkillsMatrix[#Headers],0)),"*"&$AG)
如果 $AG
为空,则它独立于 $V
中指定的列进行计数。
顺便说一句:在 table (ListObject) 中,这不需要作为数组公式输入。
这不是您公式的 100% 替换,因为如果 $V
为空并且没有给出 table 列标题,它就不起作用。然后,您的公式将查看所有列,但使用 COUNTIFS
是不可能的,其中每个附加范围必须具有与 criteria_range1 参数相同的列数。所以如果 $V
也可以为空,那么这将不起作用。
如果是这样,那么您可以使用
{=SUM((tblSkillsMatrix[role]=[@role])*(LEFT(INDIRECT("tblSkillsMatrix["&$V&"]"),LEN($AG))=$AG))}
优点:$V
和$AG
都可以为空。
缺点:INDIRECT
的易变行为,因此即使在 ListObject-table 中,此公式也必须是数组公式。必须使用Ctrl+Shift+Enter.