text+rept生成格式重复的字符串(糖葫芦不要钱)
1.将A2显示为B2的结果
如下图所示,将123456789变为001,002,003,004,005,006,007,008,009。在解决问题前,我们先要认识和了解问题。观察一下可以发现结果的字符串是相同的格式重复了好几次。所以我们先把格式确定一下,然后再按次数重复就可以了。在B2单元格输入公式=MID(TEXT(A2,REPT("\,\0\00",9)),2,99),完成。
先来看rept的第1参数"\,\0\00",它就是格式的基本组成部分,\是强制将它后面的一个字符显示为文本,比如逗号在text的格式代码中代表的是千位分隔符,但是在逗号前面加个\就把逗号强制看作文本逗号;同样的在0前面加\就把0当作文本0,而不是占位符。这样的话,在"\,\0\00"中,只有最后一个0是占位符,其他的都被强制显示为文本,就相当于""",00""0"。所以只会在最后一个0占位。
REPT("\,\0\00",9)这部分就是将基本格式代码重复9次,TEXT(A2,REPT("\,\0\00",9))这部分就是用123456789来占位,结果为",001,002,003,004,005,006,007,008,009"。这样的话最前面多了一个逗号,所以用mid从第2位开始提取99位。
另外一种写法就是用双引号,公式为=MID(TEXT(A2,REPT(""",00""0",9)),2,99)。
2.用123456789生成下面的楼号
如下图所示,用123456789生成楼号,比如1楼就是101,102,103,104,105,106,107,108,109。2楼就是从201开始到209结束,以此类推。这个题目是上个题的升级版,同样是在基本格式的最后一个0上占位,但是多了个楼号的条件。在B5单元格输入公式=MID(TEXT(A$5,REPT(""","&ROW(A1)&"0""0",9)),2,99),向下填充,完成。
首先用row函数生成楼号,如下图所示。
=""","&ROW(A1)&"0""0"这部分是构建基本的格式代码,只让最后一个0占位,其他的符号都强制显示为文本,所以要用双引号将它们包裹。
=REPT(""","&ROW(A1)&"0""0",9)这部分是将基本的格式代码重复9次,如下图所示,看起来会有点晕,密集恐惧症。不过只要你理解了它的意思就可以了,不需要看清楚。
=TEXT($A$5,REPT(""","&ROW(A1)&"0""0",9))这部分就是用text设置格式,把123456789分别占据基本格式代码的最后一个0。最后用mid从第2位提取99位,完成。
3.将"*"号前后的数字统一补足4位数,不足4位的前面补"0"
如下图所示,将A列的数据变为B列的结果。思路是先将星号之间的数字提取出来,然后补全4位,再连接起来,最后用text设置格式。在B19单元格输入公式=MID(TEXT(SUM(MID(SUBSTITUTE(A19,"*",REPT(" ",50)),ROW($1:$4)*50-49,50)*10^{12;8;4;0}),REPT("\*0000",4)),2,99),按ctrl+shift+enter三键结束,向下填充。
SUBSTITUTE(A19,"*",REPT(" ",50))这部分就是用substitute将星号替换为50个空格;MID(SUBSTITUTE(A19,"*",REPT(" ",50)),ROW($1:$4)*50-49,50)这部分是用mid将空格隔开的4个数字分别提取出来,这个套路以前说过多次,就不再详细说明。
MID(SUBSTITUTE(A19,"*",REPT(" ",50)),ROW($1:$4)*50-49,50)*10^{12;8;4;0}这部分是用mid提取后的结果乘以10的12次方,8次方,4次方,0次方。因为4位一组,然后用sum求和,就相当于把4个数字补全后连在一起。下图是sum返回的结果。
=TEXT(SUM(MID(SUBSTITUTE(A19,"*",REPT(" ",50)),ROW($1:$4)*50-49,50)*10^{12;8;4;0}),REPT("\*0000",4))这部分就是用text+rept生成格式重复的代码,结果如下图所示。最后用mid从第2位提取99位。
如果你有其他的方法,欢迎在留言区写出你的答案,让我们一起学习。
文件链接:
https://pan.baidu.com/s/1oMfYIXF2OZJkH07K2T_vdA
提取码:w4tw