在Excel中合并单元格的Countif

slhcrj9b  于 2022-12-14  发布在  其他
关注(0)|答案(3)|浏览(611)

我有下面的表格。从这个表格中,我想用一个函数得到每个班的科目数,如F列所示。比如A班有多少科目,B班有多少科目,等等。
我使用了COUNTIF公式,但由于合并的单元格,该公式无效。

是否可以获得保留合并单元格的受试者计数?

5m1hhzi4

5m1hhzi41#

下面是使用MAP()的另一种方法

·单元格D2中使用的公式

=LET(a,LOOKUP(ROW(A2:A21),ROW(A2:A21)/(A2:A21<>""),A2:A21),
b,UNIQUE(a),
c,MAP(b,LAMBDA(x,SUM(--(x=a)))),
VSTACK(A1:B1,HSTACK(b,c)))

我们也可以使用SCAN(),因为**JvdVSir已经显示了该选项,因此使用了OLDSCHOOL函数**LOOKUP()。该函数与使用SCAN()执行的操作相同,请参阅下面的屏幕截图。

·使用SCAN()

=SCAN(A2:A21,A2:A21,LAMBDA(x,y,IF(y="",x,y)))

·使用LOOKUP()

=LOOKUP(ROW(A2:A21),ROW(A2:A21)/(A2:A21<>""),A2:A21)

一些友好的建议:

  • 合并单元格可能有助于您以有意义的方式排列值,但它们也带来了问题;
  • 使用合并单元格时不能对列进行排序;
  • 你不能使用过滤器选项,即使你可能有一些更大的问题等着你去解决,试试看;
  • 请改用"在所选内容中居中“,这是一个比合并更好的替代方法。
  • 最后但并非最不重要的是,我看到大多数Maven建议和建议在避免合并单元格。所以请避免合并单元格。
50pmv0ei

50pmv0ei2#

一种方法是通过REDUCE()

D1中的公式:

=LET(a,SCAN(A2,A2:A21,LAMBDA(a,b,IF(b="",a,b))),REDUCE(A1:B1,UNIQUE(a),LAMBDA(b,c,VSTACK(b,HSTACK(c,SUM(--(a=c)))))))

注意SCAN()的作用就像一个填充函数。还要注意合并的单元格是邪恶的!

klsxnrf1

klsxnrf13#

=LET(a,A2:A21, 
     c,DROP(REDUCE(0,a,LAMBDA(x,y,VSTACK(x,IF(y="",TAKE(x,-1),y)))),1),
     u,UNIQUE(c),
     m,MMULT(--(TRANSPOSE(c)=u),SEQUENCE(COUNTA(c),,1,0)),
HSTACK(u,m))

其中,c创建列A的未合并等效项,将空白替换为上述值,m为每个值创建计数,该计数等于列A的未合并版本中的唯一值u
编辑:正如Mayukh所评论的,我们可以用MAP/SUM替换MMULT:

=LET(a,A2:A21,
     c,DROP(REDUCE(0,a,LAMBDA(x,y,VSTACK(x,IF(y="",TAKE(x,-1),y)))),1),
     u,UNIQUE(c),
HSTACK(u,MAP(u,LAMBDA(x,SUM(--(c=x))))))

相关问题