计算单元格,但不计算具有特定部分字符串的单元格

时间:2017-01-23 20:49:32

标签: excel excel-formula formula

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

我用它做什么用的?我会有一个类似于这个的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 1 = 5,Classroom 2 = 4等。我有80多个教室,不能继续每个班级使用一个公式,因为重新调整范围是非常耗时的。 (因为范围大小不一,我还没有找到更好的方法)。

有人可以帮忙吗?我已经结束了。

3 个答案:

答案 0 :(得分:2)

总计:

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

enter image description here

答案 1 :(得分:1)

将此作为答案,因为你有一个2部分的问题而且很难将所有这些都纳入评论

第1部分:一,我想要计算此列中不包含“课堂”一词的所有项目

这部分非常简单。这会计算所有非课堂教学的内容:

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

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

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

这将返回17.

基本上,这两个公式通过获取您给出的数组,然后比较每个值来查看它是否等于课堂或空白。它将其计为0,将其他任何值计为1,然后将得到的0和1的数组相加。

接下来,第2部分:我真的想要一个会返回的公式:Classroom 1 = 5,Classroom 2 = 4

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

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

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

然后,您可以在帮助列上使用countif,因此我们可以将其计入教室分区。假设您在f1中有教室1,在f2中有教室2,依此类推 -

=COUNTIF($B$2:$B$22, F1)

下面的截图,虽然由于某种原因我无法将其嵌入为链接

Here's a screenshot

答案 2 :(得分:0)

首先添加一个帮助列,以显示一行与哪个课堂相关。假设数据位于从A开始的列A2中,请将此公式放在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*")

enter image description here