问题求助SOS:如何对单元格内强制换行的数据,按行从1开始添加序号。
别说,这个问题还挺有意思。
如下图所示:
A列为数据源,每个单元格中的数据都是由强制换行符将数据分成了若干行,每个单元格中的数据行数不确定。我们想要在单元格内每行的起始位置批量添加序号,序号由1开始递增。效果如B列所示。
这样的数据源可能存在几千行。
小编想说:这个问题小而精,也挺有趣,知识点也比较重要,重在思路的巧妙与运用,非常值得学习。下面分享解题步骤。
第一步:拆分
使用职场高频函数TEXTSPLIT拆分函数:
=TEXTSPLIT(A2,,CHAR(10))
CHAR函数以10做为唯一参数,在Excel与WPS表格中广泛应用于对“强制换行符”这种特殊符号的表示。
运用TEXTSPLIT函数,以CHAR(10)(强制换行符)作为行分隔符,将A2单元格中的数据实现拆分到行(一列多行)。
第二步:添加序号
我们使用ROW获取行号函数:
=ROW($1:$5)
得到第1~5行的行号。
有的小伙伴发出疑问:
这一步的目的是啥,为啥获取第1~5行的行号?
原因是由于我们不确定每个单元格内数据到底被强制换行符隔成了几行,所以要解决此类问题之前,最好取一个较大的行数,以覆盖所有的可能性。比如我们不确定有几行,可以取一个较大的值,比如99。
因为本例中小编确认不会超过5行,所以就人为的设置为ROW函数获取1~5行的行号。
所以这个最大行号的确定要灵活运用。
运用连接符&:
=ROW($1:$5)&","
用上一步公式返回的5个序号分别连接一个间隔符逗号“,”。
再次运用连接符&:
=ROW($1:$5)&","&TEXTSPLIT(A2,,CHAR(10))
在上一步公式返回结果的基础上连接第一步中A2单元格分行后的多行数据。
这样我们就将分行后的每个数据分别加上了序号。
但是,由于我们用ROW函数取了一个较大的最大行号,那么当A列数据分行后的行数少于这个最大序号时,连接后的结果便会产生错误值,为了规避错误值,我们使用的是TOCOL函数:
=TOCOL(ROW($1:$5)&","&TEXTSPLIT(A2,,CHAR(10)),3)
我们用TOCOL函数,继续将上述公式返回的一列结果再次重复转置为一列,但是这次转置的时候,我们设置了第2参数:3,即忽略空值与错误值后再次转置,所以错误值全部消失了。
第三步:合并
运用TEXTJOIN函数:
=TEXTJOIN(CHAR(10),,TOCOL(ROW($1:$5)&","&TEXTSPLIT(A2,,CHAR(10)),3))
继续用CHAR(10)强制换行符作为分隔符,将分行且添加序号后的多行数据合并到一个单元格中。
注意:
写好第一个公式返回结果后,需要点击一下“开始-对齐方式-换行”按钮,再进行公式下拉填充,才能保证格式效果完全正确。