lookup真强大!按指定次数重复内容并添加序号

这个效果用函数实现起来还是有点困难的,公式也相对较长。不过掌握后还是很有用处的,可以实现多表内容合并在一张表中。
在D3单元格输入下面的公式,向下填充,完成。
=TEXT(LOOKUP(ROW(A1)-1,SUBTOTAL(9,OFFSET(B$2,,,ROW($1:$5))),A$3:A6)&LOOKUP(ROW(A1)-1,SUBTOTAL(9,OFFSET(B$2,,,ROW($1:$5))))-ROW(A1),";")
这个公式看起来很长,其实分为两个部分,用&连接起来。第1部分是按次数重复姓名,第2部分是添加序号。而且这两部分有重复的,只要理解了一个部分,另一个部分就好理解了。
先来看第1部分LOOKUP(ROW(A1)-1,SUBTOTAL(9,OFFSET(B$2,,,ROW($1:$5))),A$3:A6),是个lookup函数。
第1参数ROW(A1)-1是个用row函数构建的序号,从0开始,公式下拉会变为1,2,3...
第2参数SUBTOTAL(9,OFFSET(B$2,,,ROW($1:$5)))是一个累加求和,返回的结果为{0;2;5;9;10}。相当于下图C列的结果。用的是subtotal和offset的多维引用,可以免去辅助列。

第3参数A$3:A6是姓名的区域,没什么好说的。重要的是这3个参数放在一起,lookup会返回什么结果。如下图C列所示,得到了按次数重复的姓名。

其实这个公式的关键是找到它的分界点{1;3;6;10;11},你可以手工推算一下。第1个姓名重复2次,那就是1,2。第2个姓名重复3次,那就是从3开始,分别是3,4,5。以此类推,得到D列的数字。

再来看第2部分LOOKUP(ROW(A1)-1,SUBTOTAL(9,OFFSET(B$2,,,ROW($1:$5))))-ROW(A1),还是个lookup函数,但是后面要减row(a1)。



https://pan.baidu.com/s/13LWfdgMY7iu7j01PcN7vRQ
