难点有两个,一个是如何在合并单元格中使用数组公式,另一个是如何确定最后一个合并单元格的行数。
1.求各部门的平均工资和最大工资
还是我们上次的数据,A列的部门是合并单元格,B列是各部门员工的工资,在C列和D列的合并单元格中分别计算各部门的平均工资和最大工资。其实求平均工资和最大工资的思路是一样的,所以我们这里只说最大工资是如何算出来的。下面说一下思路:想要计算各部门的最大工资,首先要确定各部门工资所在的区域,比如销售部工资所在的区域是B2:B6;区域确定好了,只需用max取最大值就可以了。所以如何确定各部门工资的区域是问题的关键,这里我们用offset的扩展性来确定区域的范围。比如销售部的区域就是从B2开始向下扩展5行,5行就是销售部所在合并单元格的行数。这样的话问题就转化为求各部门合并单元格的行数。以A2这个合并单元格为例,说明一下它的行数5是怎么算出来的,是从A3开始向下查找下一个非空单元格的位置,找到A7,从A3到A7是5个单元格。这里给出4种解法,主要说明合并单元格的行数是如何算出来的,至于后面的offset扩展区域和max取最大值就不说了。第1种,用的是frequency,选中D2:16,在编辑栏输入公式=MATCH(1,FREQUENCY(1,N(D3:D$16<>"")),),按ctrl+enter批量填充。
第2种,用的是match第3参数为-1的降序查找方式。选中D2:D16,在编辑栏输入公式=MATCH(,MMULT(N(D3:D$17=""),1),-1),按ctrl+enter填充。用mmult是为了不用按三键,它支持内存数组。第3种,用的是mode,要借用B列的区域。选中D2:D16,在编辑栏输入公式=MODE((A3:B17="")%+ROW($1:$15)),按ctrl+enter填充。可以看到最后一个合并单元格的行数为3.01,不过不影响后续的计算。
第4种,是用下一个非空单元格的行号减去上一个非空单元格的行号,公式较长,就不录制动图了,直接给出公式。
同样选中D2:D16,在编辑栏输入公式=SUM(SMALL(MMULT((A$2:A$16<>"")*ROW($2:$16)+(A$2:A$16="")*17,1),COUNTA(A$2:A2)+{0,1})*{-1,1}),按ctrl+enter填充。
这4种方法都是数组公式,因为用到了支持内存数组的函数frequency,mmult,mode,所以不用按ctrl+shift+enter三键。解决文章开头说的第一个问题”如何在合并单元格中使用数组公式“。
第二个问题是如何确定最后一个合并单元格的行数,因为在它的下面没有非空单元格了,所以确定起来还是有难度的。不过在上面的4个公式中都解决了这个问题。
今天的4种方法还是有些难度的,公式也不好讲解,只能靠你自己学习了。完整的公式请下载文件查看。
如果上面的公式你都学会了,那么下面这个合并家庭成员的问题也就迎刃而解了。
https://pan.baidu.com/s/1AriDaGwGsVVJmT0zb65uDw