计数细胞但不计数具有特定部分字符串的细胞

Count cells but do NOT count cells with a specific partial string

首先我想说,我确实看到了类似的问题;但是,如果单元格确实包含部分字符串,他们会对单元格进行计数。那个版本的公式我水平不行。

我用它做什么?我会有一个看起来类似于此的 excel 页面:

Classroom 1    
32523    
24634    
67457    
43636    
35467

Classroom 2    
34563    
64746    
79877    
23456

Classroom 3    
23777    
36434    
23526    
68997    
36346    
34634    
74567    
58867

这里的目标有两个。第一,我想计算此列中不包含单词 "Classroom" 的所有项目,第二件事我想完成(如果可能的话,这可能太多了)如果我可以计算每个 class房间分开。我的意思是,这些专栏的大小各不相同,并且每个月都会向我发送一份新文件。我真的想要一个 return 的公式:教室 1 = 5,教室 2 = 4,等等。我有 80 多个 class 房间,不能继续使用每个 class 的一个公式作为重新调整范围非常耗时。 (因为范围大小不同,我还没有找到更好的方法)。

有人能帮忙吗?我不知所措。

因为您有一个由两部分组成的问题,所以很难将所有这些都放入评论中

第 1 部分: 一,我想计算此列中不包含单词 "Classroom"

的所有项目

这部分非常简单。这将计算你所有的 non-classroom 个:

=SUMPRODUCT(--(LEFT(A1:A22, LEN("Classroom")) <> "Classroom"))

但是,它会计算空白(因此您的示例数据将为 19)。如果您不想计算空格:

=SUMPRODUCT(--(LEFT(A1:A22, LEN("Classroom")) <> "Classroom") * (A1:A22 <> ""))

这将 return 17.

基本上,这 2 个公式的工作原理是获取您提供的数组,然后比较每个值以查看它是等于 classroom 还是空白。它将那些计为 0,将其他任何计为 1,然后对结果数组 0 和 1 求和。

接下来,第 2 部分: 我真的很想要一个公式 return 其中:课堂 1 = 5,课堂 2 = 4

最简单的方法是添加辅助列。假设您的数据从 A2 开始,请使用以下内容:

=IF(OR(LEFT(A2,9)="Classroom", A2 = ""), "",LOOKUP(2,1/(LEFT(A:A2, 9)="Classroom"),A:A2))

这个公式的工作原理是检查它上面的所有内容,并创建一个 TRUE/FALSE (1/0) 的数组来判断它是否是教室。然后,当你到达终点时,你尝试在 1 和 0 的数组中找到一个 2。显然你不能,所以它默认为最后一个小于自身的值。这是最后一个(最后一个教室)。然后索引给出该课堂记录的位置并将其打印出来。

然后,您可以只在辅助列上使用 countif,这样我们就可以按班级分区对其进行计数。假设您在 f1 中有教室 1,在 f2 中有教室 2,依此类推 -

=COUNTIF($B:$B, F1)

下面的屏幕截图,尽管出于某种原因我无法将其作为 link

嵌入

首先添加一个辅助列来显示一行与哪个教室相关。假设数据位于从 A2 开始的第 A 列中,将此公式放入 B2 并向下复制所有数据行。您可以隐藏此列,或将其放在右侧

=IF(LEFT(A2,9)="Classroom",A2,B1)

计算所有数据点的公式

=COUNTIFS(A:A,"<>",A:A,"<>Classroom*")

将教室列表放在一列中,例如第 C 列。在单元格 D2 中输入此公式并向下复制

=COUNTIFS(B:B,C2,A:A,"<>",A:A,"<>Classroom*")

总计:

=COUNT(A:A)

对于每个教室,按照它们出现在 A 列中的顺序列出一个列表,然后在第一个教室旁边的第一个单元格中使用它并向下复制。不需要辅助列。

=COUNT(INDEX(A:A,MATCH(C3,A:A,0)+1):INDEX(A:A,IFERROR(MATCH(C4,A:A,0)-1,MATCH(1E+99,A:A))))