如何给姓名编写序号,辅助列用起来!

如下图所示,A列是一些姓名,现在的要求是给A列的姓名编号,结果如B列所示。
-01-

函数法

对于这个问题,我们可以用辅助列的方法来做。在C列添加一个辅助列,C3单元格输入公式=LEN(A3)-LEN(SUBSTITUTE(A3,"、",))+1,下拉填充,计算出每个单元格的人数。

LEN(A3)-LEN(SUBSTITUTE(A3,"、",))这部分是计算A3单元格中顿号的个数,用原来字符串的长度减去将顿号替换掉的字符串的长度。用顿号的个数加1,就是人数。

然后在B3单元格中输入下面的公式,按ctrl+shift+enter三键,下拉填充,完成。

=TEXTJOIN("、",1,BASE(ROW(INDIRECT("1:"&C3))+SUM(C$2:C2),10,3))

为了方便解释,下面以B5单元格的公式进行说明。

ROW(INDIRECT("1:"&C5))这部分相当于row(1:2),indirect将文本型的"1:2"(字符串)变为真正的1到2行(单元格区域)。

SUM(C$2:C4)是计算公式所在单元格上面区域的所有人数。也就是计算A5单元格之前的所有人数,共7人。

ROW(INDIRECT("1:"&C5))+SUM(C$2:C4)这两部分相加,就是用row(1:2)+7,结果为{8;9}。

简单来说,就是先算出A5单元格的人数2,然后用row+indirect将其变为{1;2},再算出A5单元格上面所有的总人数7,最后用{1;2}+7得到{8;9}。

BASE(ROW(INDIRECT("1:"&C5))+SUM(C$2:C4),10,3)这部分就是BASE({8;9},10,3),用base函数将{8;9}变为{"008";"009"}。和TEXT({8;9},"000")是一样的。

最后用textjoin将{"008";"009"}连接在一起,并用顿号作为分隔符,结果为"008、009"。这样就完成了,其它单元格也是同样的运算方法。

不用辅助列的公式就不列出来了,感兴趣的小伙伴可以下载文件自行查看。


-02-

VBA代码法

如下图所示,我将结果放在D列。首先选中D3:D12,将其设置为文本格式,然后点击按钮,结果就出来了。
供观看的代码如下:
文件链接:

https://pan.baidu.com/s/1lcWMYKm-0Hfs7oq_0QX6UQ

提取码:e99o
(0)

相关推荐