excelperfect 引言:本文的练习整理自chandoo.org。多一些练习,想想自己会怎么解决这个问题,看看别人又是怎样解决的,这样能够快速提高Excel公式编写水平。 本次的练习是:示例数据如下图1所示。 图1 现在,想根据列A中的数据对列B中的值汇总。例如,对于列A中的“A”来说,在列B中对应的值是:1、13、14、15、16、17、18,其和为94。 我们将单元格区域A2:A21命名为“D”,单元格区域B2:B21命名为“V”。 要求只能使用公式,不能使用VBA,仅能使用上述两个命名区域名称,不能使用填充功能填充空单元格。 请写下你的公式。 解决方案 公式1:数组公式。 =SUM(MMULT(N(LOOKUP(ROW(D),IF(D<>'',ROW(D)))=TRANSPOSE(IF(D='A',ROW(D)))),ROW(D)^0)*V) 公式2:数组公式。 =SUM(IFERROR(IF(MATCH(LOOKUP(ROW(D),IF(D<>'',ROW(D))),IF(D='A',ROW(D)),0),V),0)) 公式3:数组公式。 =SUM(ISNUMBER(MATCH(LOOKUP(ROW(D),IF(D<>'',ROW(D))),IF(D='A',ROW(D)),0))*V) 公式4:数组公式。 =SUM(IF(LOOKUP(ROW(D),ROW(D)/(D<>''),D)='A',V)) 或者: =SUM((LOOKUP(ROW(D),ROW(D)/(D<>''),D)='A')*V) 或者: =SUMPRODUCT((LOOKUP(ROW(D),ROW(D)/(D<>''),D)='A')*V) 公式5:数组公式。 =SUM((LOOKUP(ROW(D),IF(D<>'',ROW(D)))=TRANSPOSE(IF(D='A',ROW(D))))*V) 公式6:数组公式。 =SUM((INDEX(D,N(IF({1},MATCH(ROW(D),IF(NOT(ISBLANK(D)),ROW(D),''),1))))='A')*V) 或者: =SUMPRODUCT(--(INDEX(D,N(IF({1},MATCH(ROW(D),IF(NOT(ISBLANK(D)),ROW(D),''),1))))='A'),V) 公式7: =SUM(FILTER(V,IF(V,LOOKUP(V,V/(D<>''),D))='A')) 适用于Office365。 …… 公式并没有给出详细的解析,有兴趣的朋友可以参照前面推送的有关分析公式的文章对这些公式进行解析,相信对理解Excel函数,编写公式解决问题会有很大的帮助。
|
|
来自: hercules028 > 《excel》