计算包含字符串的单元格数量,但当该字符串附加到某个字母时则不计算

问题描述 投票:0回答:2

我这里有一张桌子:

A B
红色
I.A.3, I.C.2, I.A.2
蓝色
I.A.2, I.A.3
蓝色
I.C.1
红色
II.A.1, I.A.2, I.B.2
红色
I.C.1, II.A.2
蓝色
I.A.1

我想创建一个公式来计算至少一次包含“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 上做到这一点(无法在工作计算机上添加宏)。

excel excel-formula count countif
2个回答
1
投票

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)))))

0
投票

当然,还有更简单的方法来实现以下解决方案,但是我尝试了以下方法并提出了这个,它不需要任何

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))

© www.soinside.com 2019 - 2024. All rights reserved.