相信大家在使用Excel的过程中应该经常使用合并单元格吧,但是也是因为合并单元格导致了各种问题,比如:移动问题,序号问题、计数问题、求和问题、排序问题、筛选问题等等。
小编在上一章最后已经分享了关于移动的问题即移动列,在大多数标题行都会用到合并单元格,而这也会导致列无法移动列,而解决办法就是使用「水平对齐」中「跨列居中」。
今天小编和大家分享其他几类因为合并单元格导致的问题。
1、序号
如上图,我们想在序号列填充连续序号,于是我们在“一(3)班”前面的序号列输入公式:「=ROW()-4」,但是当我们想拖动填充柄自动填充下面的序号时,就会提示“若要执行此操作,所有合并单元格需大小相同。”,如下图:
根据提示的意思是因为合并单元格需相同大小,因为我们的数据是有两行合并,三行合并,那根据提示的意思是不是如果我们都用相同行数合并就可以了呢?我们来试试。
修改以后,的确不报错了,数据也出来了,但是显示不是我们想要的结果。再说实际使用过程中也不可能保证所有合并的单元格大小是相等的。
我们可以使用COUNT函数来解决这个问题,这个函数小编也说过好多遍了,主要作用就是计算包含数字的单元格个数以及参数列表中数字的个数。
操作很简单,首先我们选择B5:B11单元格区域,然后在编辑栏中输入公式「=COUNT(B$4:B4)+1」,最后按快捷键「Ctrl+Enter」完成批量填充序号。
2、计数
如上图,当我们想在班级人数列中统计每个班级人数的时候,要怎么做呢?
我们可以来梳理一下思路:
① 假如我们计算序号1班的人数那么我们可以直接用公式:「=COUNTA(D5:D6)」(COUNTA 函数计算范围中不为空的单元格的个数。)即可得到;
② 如果计算序号2班的人数,我们就可以用公式:「=COUNTA(D5:D9)」计算出两个班的人数,然后减去序号1班的人数即可;
③ 同理也就可以计算出序号3班的人数。
顺着这个思路,我们可以写出公式「=COUNTA(D$5:D6)-SUM(F$5:F6)」,当我们在F5单元格中输入,上面公式后,得到如下提示:
这是因为SUM(F$5:F6)形成了自引用,但是这个求和又是必须的,因为在计算后面班级人数的时候是需要减去前面班级人数和的。
那么如果我们把上面方法反过来计算,从下往上计算,先算序号3班的人数,再算序号2,序号1班的人数呢?而且我们求和公式不用当前单元格而用下一行单元格,比如计算序号3班人数公式用「=COUNTA(D10:D$11)-SUM(F11:F$11)」,因为本身我们是不需要把当前班级人数计算到求和公式里的,而且因为合并单元格的特殊数据都在第一行里,因此SUM(F11:F$11)这样的写法不但解决了不把当前班级人数加入求和计算,而且还解决了,自引用的问题。因此写成SUM(F11:F$11),而不是SUM(F10:F$11)。这一点可以说是这个公式的精华了。
整个梳理过程已经完成,实现还是要注意一点,不能直接用上面的公式,因为我们用公式后还要自动填充的,因此我们需要使用对应的公式。
选择F5:F11单元格区域,在编辑栏输入公式「=COUNTA(D5:D$11)-SUM(F6:F$11)」,按快捷键「Ctrl+Enter」完成批量计算人数。
具体过程如下:
3、求和
如上图,我们求每个班的总分,其实经过上一个例子,这个问题就很简单了,原理完全一样,只需要使用公式「=SUM(E5:E$11)-SUM(G6:G$11)」。
4、排序
如上图,我们希望对每个班学生继续一个成绩排序,也就只做班级内部排序。
而如果直接对E列进行排序那么就导致对所有学生排序,这显然不符合我们的需求。如果我们想保持班级的整体位置不变,那么就需要保证下面的班级所有人的分数必须比上面班级所有人的分数都要高。当前分数显然是不行的,因此我们需要借助辅助列,然后拼接出我们想要的分数,比如我们把每个班级前面的序号+得分这样不就行了吗?
于是小编在F5单元格中用公式「=B5&E5」进行了拼接,但结果不尽如人意,因为序号列是合并单元格列,只有每个合并单元格第一行有值,而且如果有人得分是1位数或3位数那么即使序号+得分拼接正确,结果也是错误的。至少整体思路是没问题的,因此我们需要换一种获取序号的方式和拼接方式。
序号:我们不可以直接使用值,但是可以用公式「=COUNT($B$5:B5)」计算出来,其中的原理大家可以自己思考。
拼接方式:为了保证即使每个学生的得分位数不一样也可以使用,我们可以把需要变成一个比分数最大值还大的数然后在加上得分即可,比如序号*10000+得分。
因此如上图使用公式「=COUNT($B$5:B5)*1000+E5」填充辅助列后,得到了我们想要的数据了,然后在对辅助列排序即可。注意排序不用选择序号和班级列,因为是合并单元格排序会报错,而且我们的要求结果也是班级顺序不会发生变化,因此只需要选择D4:F11单元格区域即可。
上面例子是把班级内部按学生得分升序排序的,如果要把班级内部学生得分按降序排序要怎么做呢?大家可以自己尝试一下哦。
5、筛选
如上图,当我们对班级进行筛选,一(1)班有3个学生,结果却只筛选出来一位。其原因是在合并单元格时,会得到“合并单元格时,仅保留左上角的值,而放弃其他值。”,如下图。
因此C7:C9单元格区域合并单元格后只有C7单元格内有一(1)班,其他都是空值。
我们把C7:C9单元格区域取消合并单元格,看看结果:
不能筛选的原因我们搞清楚了,但是要怎么解决这个问题呢?那如果我们能让每个单元格都有值,但是看起来还是合并单元格的样子只保留一条数据,是不是就可以了呢。这又能不能做到呢?
这个时候就是考验基本功的时候了,不知道大家还记得「格式刷」吗?还记得「粘贴」中「格式」吗?这两个功能可都是可以做到复制单元格格式的功能。
说到这里,是不是茅塞顿开呢?我们可以先把班级列复制出来,然后把原班级列取消合并单元格,并把其他空值重新填充正确,然后应用「格式刷」或「粘贴」中的「格式」把复制出来的班级列样式复制回去。
我们先进行一个简单的验证:
通过上面的演示过程,我们可以看到使用复制单元格格式以后,C7:C9单元格区域看起来还是合并单元格,但是当把合并单元格取消以后C7:C9区域每个单元格都是有值的,因此这个方式是可用性的。下面操作就容易多了。