问题:实现如下图的效果
解答:
一、函数
vbscript
=IFERROR(TRIM(MID(SUBSTITUTE($A$2,",",REPT(" ",LEN($A$2))),(ROW(A1)-1)*LEN($A$2)+1,LEN($A$2))),"")
二、在单元格C2中填写如下函数
三、全选要填充的单元格并且按CTRL+D
函数解析:
1. SUBSTITUTE
函数
-
语法 :
SUBSTITUTE(text, old_text, new_text, [instance_num])
。 -
作用:用于将文本字符串中的部分文本替换为新的文本内容。
-
在本公式中的应用 :
SUBSTITUTE($A$2,",",REPT(" ",LEN($A$2)))
这部分里,$A$2
表示要处理的文本所在单元格(这里就是存放"晓妍,宇轩,晨晨,子涵"的单元格),","
表示要被替换掉的旧文本,也就是逗号,REPT(" ",LEN($A$2))
是用来生成替换内容的。REPT
函数会按照指定的次数重复文本,这里REPT(" ",LEN($A$2))
的意思是重复空格,重复的次数等于A2
单元格文本的长度(通过LEN($A$2)
获取长度值)。整体上就是把A2
单元格文本里的逗号都替换成和原文本长度一样数量的空格,例如原文本长度为15个字符,就把逗号替换成15个空格,目的是为后续按固定长度提取名字做准备,让每个名字之间间隔足够大,便于区分。
2. MID
函数
-
语法 :
MID(text, start_num, num_chars)
。 -
作用:从一个文本字符串中截取出指定起始位置以及指定数量字符的部分文本。
-
在本公式中的应用 :
MID(SUBSTITUTE($A$2,",",REPT(" ",LEN($A$2))), (ROW(A1)-1)*LEN($A$2)+1, LEN($A$2))
,前面SUBSTITUTE
函数处理后的结果作为MID
函数要截取的文本来源,(ROW(A1)-1)*LEN($A$2)+1
用来确定每次截取的起始位置,ROW(A1)
返回的是当前行号(当公式在C2单元格时,ROW(A1)
返回1 ,随着公式向下拖动到C3、C4等单元格时,ROW
函数返回的值会相应变成2、3等),乘以LEN($A$2)
(也就是原文本长度)再加1,就可以按原文本长度的间隔依次往后确定起始位置,LEN($A$2)
作为第三个参数表示每次截取的字符数量就是原文本长度这么多个,这样就能依次把替换逗号为空格后的每个名字所在部分截取出来了。
3. TRIM
函数
-
语法 :
TRIM(text)
。 -
作用:去除文本前后多余的空格,使文本更整洁规范地显示。
-
在本公式中的应用 :因为前面通过
SUBSTITUTE
和MID
函数操作后,截取出来的名字部分前后可能带有多余的空格,所以用TRIM
函数对截取到的内容进行处理,去掉那些多余空格,得到干净的名字文本。
4. IFERROR
函数
-
语法 :
IFERROR(value, value_if_error)
。 -
作用 :如果表达式
value
的计算结果为错误(比如公式运算出现错误情况,像原文本不符合预期格式等导致前面函数无法正确提取等情况),则返回value_if_error
指定的值,否则返回value
本身的值。 -
在本公式中的应用 :在这里整个公式外面套上
IFERROR
函数,并且value_if_error
设置为""
(空文本),就是为了避免前面函数在某些特殊情况下出现错误值而影响最终显示效果,让出现错误时直接显示为空文本,保证填充到单元格里的数据是正常名字或者为空的较规范的状态。