我这里有一张桌子:
A | B |
---|---|
红色 |
|
蓝色 |
|
蓝色 |
|
红色 |
|
红色 |
|
蓝色 |
|
我想创建一个公式来计算至少一次包含“I.A”的“红色”行单元格的数量。因此,在上述情况下,公式将得出 2。
我遇到的问题是让它只计算包含“I.A”但不包含“II.A”的单元格(如果它不包含“I.A”)。因此,从某种意义上说,我需要至少对包含“I.A”的红细胞进行一次计数,但如果唯一出现的是“II.A”之一,则不需要计数。
问题是它们包含相同的字符,除了 II.A 左侧有一个额外的 I。
我尝试过 COUNTIFS() 但这给了我所有值,包括 II.A 独占值。
我最新的公式是:
=SUM(IF(A:A="Red", IF(ISNUMBER(FIND("I.A", B:B)) * NOT(ISNUMBER(FIND("II.A", B:B))), 1, 0)))
但是,此公式导致计数不包括同时存在“I.A”和“II.A”的单元格。我需要以某种方式检查是否有另一个“我”不在那里。使用正则表达式会更容易,但我认为我不能在 Excel 上做到这一点(无法在工作计算机上添加宏)。
IIUC,您可以使用
SUMPRODUCT
执行此操作,在文本中附加 ,
,然后查找 , II.A
但不查找 , I.A
,然后从 I.A
的计数中减去该结果。
=SUMPRODUCT((A2:A7="Red")*(ISNUMBER(FIND("I.A",B2:B7))))-SUMPRODUCT((A2:A7="Red")*(ISNUMBER(FIND(", II.A",", "&B2:B7)))*(NOT(ISNUMBER(FIND(", I.A",", "&B2:B7)))))
编辑:
不需要添加逗号和空格,只需一个空格即可:
=SUMPRODUCT((A2:A7="Red")*(ISNUMBER(FIND("I.A",B2:B7))))-SUMPRODUCT((A2:A7="Red")*(ISNUMBER(FIND(" II.A"," "&B2:B7)))*(NOT(ISNUMBER(FIND(" I.A"," "&B2:B7)))))
当然,还有更简单的方法来实现以下解决方案,但是我尝试了以下方法并提出了这个,它不需要任何
LAMBDA()
迭代,而是使用两个 MMULT()
函数来达到所需的输出.
• 单元格中使用的公式 D2
=LET(
_Colors,A1:A6,
_IA,B1:B6,
_Instance, SEQUENCE(,MAX(LEN(_IA)-LEN(SUBSTITUTE(_IA,", ",)))),
_SplitByDelimiter, IFNA(TEXTBEFORE(TEXTSPLIT(TEXTAFTER(", "&_IA,", ",_Instance),","),".",-1),""),
_extract, FILTER(_Colors,MMULT(N(_SplitByDelimiter="I.A"),TOCOL(_Instance^0))>0),
UNIQUE(HSTACK(_extract, MMULT(N(_extract=TOROW(_extract)),SEQUENCE(ROWS(_extract),,,0)))))
启用
MS365
Beta 通道后,上述内容可以变得更短:
=LET(
_Colors, A1:A6,
_IA, B1:B6,
_Instance, SEQUENCE(,MAX(LEN(_IA)-LEN(SUBSTITUTE(_IA,",",))+1)),
_SplitByDelimiter, IFNA(TEXTBEFORE(TEXTSPLIT(TEXTAFTER(", "&_IA,", ",_Instance),", "),".",-1),""),
_CountByRow, MMULT(N(_SplitByDelimiter="I.A"),TOCOL(_Instance^0)),
GROUPBY(_Colors,_Colors,COUNTA,0,0,,_CountByRow>0))