我有下面的表格。从这个表格中,我想用一个函数得到每个班的科目数,如F列所示。比如A班有多少科目,B班有多少科目,等等。我使用了COUNTIF公式,但由于合并的单元格,该公式无效。
是否可以获得保留合并单元格的受试者计数?
5m1hhzi41#
下面是使用MAP()的另一种方法
MAP()
·单元格D2中使用的公式
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()
LOOKUP()
·使用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)
50pmv0ei2#
一种方法是通过REDUCE():
REDUCE()
D1中的公式:
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()的作用就像一个填充函数。还要注意合并的单元格是邪恶的!
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:
c
m
u
=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))))))
3条答案
按热度按时间5m1hhzi41#
下面是使用
MAP()
的另一种方法·单元格
D2
中使用的公式我们也可以使用
SCAN()
,因为**JvdVSir已经显示了该选项,因此使用了OLDSCHOOL函数**LOOKUP()
。该函数与使用SCAN()
执行的操作相同,请参阅下面的屏幕截图。·使用
SCAN()
·使用
LOOKUP()
一些友好的建议:
50pmv0ei2#
一种方法是通过
REDUCE()
:D1
中的公式:注意
SCAN()
的作用就像一个填充函数。还要注意合并的单元格是邪恶的!klsxnrf13#
其中,
c
创建列A的未合并等效项,将空白替换为上述值,m
为每个值创建计数,该计数等于列A的未合并版本中的唯一值u
。编辑:正如Mayukh所评论的,我们可以用MAP/SUM替换MMULT: