
又遇到网友问这样一个计算序号的问题,要求对如图的台账明细填写序号,相同订单号的序号相同。

01. EXCEL2021及以上
如果EXCEL是2021版本以上,可以使用UNIQUE函数来获取去重后的订单号数组,再用当前订单号去查在UNIQUE结果中的排位,得到序号。
A2=MATCH(C2,UNIQUE($C$2:$C$10),0)
配合条件格式,还可将不同订单号进行交叉填充背景色以示区分。

02. EXCEL2021以下
如果EXCEL是低版本,就没法用UNIQUE函数了。我们重新来思考一下解决方案。
①如果订单号唯一,就是正常的序号+1。即,取上面的行中最大序号+1。这个好解决,考虑一下“A$1:A1”下拉的应用(绝对引用与相对引用,之前多次提到,最近一篇可参见《不规则合并单元格数据填充》)。此类解决方案:MAX(A$1:A1)+1
②但是订单号不唯一呢?那就取上面相同订单号的序号,反正都一样。
以A3为例,输入=IF(B1:B2=B3,A1:A2),结果得到2个单元格值“FALSE;0”(FALSE也是0。之所以看到2个单元格的值,是因为磊哥使用的版本为2021,具备自动溢出功能;低版本未使用组合键Ctrl+Shift+Enter完成输入的话,只能看到"#VALUE!")。

可以套一个MAX函数来获取这一列数组的最大值(最小值函数MIN、平均值函数AVERAGE都可以,反正结果都一样),如此处MAX(IF(B1:B2=B3,A1:A2))结果就是0。
套用一句话,问题多的小明要问了——A3序号应该是1啊,为什么是0?嗯,这是因为A2目前还是空的呗。A2可以用方法①获得“1”(因为C2在C1:C2区是唯一值),再往下看看就懂了。
③那订单号唯一与否,这个就可以交给COUNTIF函数了。
经过分步思考,可以得到这样一个公式:
A2=IF(COUNTIF(C$1:C2,C2)=1,MAX(A$1:A1)+1,MAX(IF($C$1:$C1=C2,A$1:A1)))

公式要从第一行开始引用起,才能保证A2也能与下面单元格公式相同,一次性搞定。
公式的计算过程可以看看动图,也请大家养成通过“公式求值”来查看公式分步计算过程的习惯:
A2的计算过程:

A3的计算过程:

以上,我们又完成了一种情况的序号公式编写。也可以看出,EXCEL版本还是要尽量保持较新的,新版本新增的函数会减轻工作负担。在工作环境无特殊要求的情况下,2016以下版本不建议继续使用。