生活知识|单元格怎么拆分,一个单元格多行内容去除空行( 三 )



图6
(2)拆分后面的数字部分 。 选中 D1 单元格, 把公式:
=MID(A1,LOOKUP(1,0/(LENB(MID(A1,ROW($1:$15),1))=2),ROW($2:$16)),15)
复制到 D1, 按回车, 则 A1 中的内容右边的“数字”被拆分到 D1 单元格;同样用往下拖的方法把 A2 和 A3 中的内容拆分到 D2 和 D3;操作过程步骤, 如图7所示:

图7
(3)拆分中间的汉字部分 。 选中 C1 单元格, 把公式 =SUBSTITUTE(SUBSTITUTE(A1,B1,""),D1,"") 复制到 C1, 按回车, 把 A1 内容中间的“汉字部分”拆分到 C1;同样用往下拖的方法, 把 A2 和 A3 的内容的中间“汉字部分”分别拆分到 C2 和 C3;操作过程步骤, 如图8所示:

图8
(4)公式说明:
A、拆分左边“字母数字”的公式:
=LEFT(A1,LOOKUP(1,0/((LENB(MID(A1,ROW($1:$15),1))=1)*(LENB(MID(A1,ROW($2:$16),1))=2)),ROW($1:$15)))
① 先用 MID(A1,ROW($1:$15),1) 把 A1 中的每个文字拆分开, 结果为:
{"W";"S";"-";"560";"长";"袖";"白";"衬";"衫";"8";"6";".";"9"}, 是怎么返回这个数组的?ROW($1:$15) 返回一个 1 到 15 的数组(15 表示 A1 中的字符总数), 即 {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}, Mid 每次从数组中取出一个元素作为开始截取参数, 并每次截取一个字符;例如:第一次从数组中取出 1, 即从第一位开始截取, 截取一个字符, 返回 "W";第二次从数组中取出 2, 即从第二位开始截取, 截取一个字符, 返回 "S";以此类推直到取完数组中的所有元素 。
② 则 LENB(MID(A1,ROW($1:$15),1)=1 变为 LENB({"W";"S";"-";"560";"长";"袖";"白";"衬";"衫";"8";"6";".";"9"})=1, LenB 依次从数组中取出每一个元素, 并返回它们的字节数, 结果变为 {1,1,1,1,1,1,2,2,2,2,2,1,1,1,1}=1, 因为每个字母数字的字节数为 1, 每个汉字的字节数为 2 。 然后再取数组中的每一个元素与 1 比较, 如果等于 1, 则返回 True, 否则返回 False, 最后返回{True,True,True,True,True,True,False,False,False,False,False,True,True,True,True} 。

③ LENB(MID(A1,ROW($2:$16),1))=2 与 LENB(MID(A1,ROW($1:$15),1))=1 是一样的道理, 所不同的是它从第二位开始把 A1 中的每个文字拆分开, 也就是舍弃第一个字, 为什么要这样拆分?LENB(MID(A1,ROW($2:$16),1))=2 返回的结果为 {1,1,1,1,1,2,2,2,2,2,1,1,1,1,0}=2, 然后取出数组中的每个元素与 2 比较, 如果相等, 则返回 True, 否则返回 False, 最后返回结果{False,False,False,False,False,True,True,True,True,True,False,False,False,False,False} 。
④ 至此, (LENB(MID(A1,ROW($1:$15),1))=1)*(LENB(MID(A1,ROW($2:$16),1))=2) 变为:
{True,True,True,True,True,True,False,False,False,False,False,True,True,True,True}*
{False,False,False,False,False,True,True,True,True,True,False,False,False,False,False}
接着把两个数组对应的元素相乘, True 被转为 1, False 被转为 0, 返回结果为:{0,0,0,0,0,1,0,0,0,0,0,0,0,0,0}, 即第 6 个为 1, 恰好是 A1 中数字 0 与汉字“长”相交的结果 。

⑤ 公式变为 =LEFT(A1,LOOKUP(1,0/({0,0,0,0,0,1,0,0,0,0,0,0,0,0,0}),ROW($1:$15))), 接着用 0 除以数组中的每一个元素, 公式变为:
=LEFT(A1,LOOKUP(1,{#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!,0,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!},ROW($1:$15)))
只有 0 / 1 = 0, 其它都返回分母为 0 错误(即 #DIV/0!);进一步计算 ROW($1:$15), 它返回{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15} 。
⑥公式变为:
=LEFT(A1,LOOKUP(1,{#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!,0,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!},{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}))
接着用 LookUp 在含有 #DIV/0! 的数组中查找 1, 由于找不到 1, LookUp 返回小于等于 1 的最大值, 所以返回第 6 个 0, 然后再根据 0 在数组中的位置在 1 到 15 的数组中查找与 0 的位置(即第 6 位)对应的元素, 因此返回 6 。

推荐阅读