Excel拆分单元格与用分列与公式把一列内容拆分为两列或三列

亮术网 2019-10-25 本网原创

在 Excel 中,拆分单元格有两种方法,一种用 Excel 提供的选项拆分,另一种用快捷键拆分。Excel拆分单元格只能把合并后的单元格拆分,不能把一个没有合并过的独立单元格拆分为两个或两个以上。

在编辑 Excel 表格过程中,除拆分单元格外,常常还会遇到把一个单元格内容拆分到两个或多个单元格或把一列拆分为两列或三列甚至更多列。无论是拆分单元格内容还是拆分列,都可以用分列法和公式法;如果数据有明显分隔符或分布均匀,可以用分列法;如果字母数字与汉字混杂不能用分列拆分,可以用公式法。

 

一、Excel拆分单元格

(一)方法一:选择法

选中待拆分单元格,例如 A1 和 B1,选择“开始”选项卡,单击“合并后居中”右边的黑色小倒三角,在弹出的菜单中选择“取消合并单元格”,则 A1 和 B1 被重新分为两个单元格;操作过程步骤,如图1所示:

Excel拆分单元格

图1

提示:Excel拆分单元格不像 Word 可以设置拆分为几个,它只会根据合并单元格的数目拆分,例如合并单元格时是把两个单元格合并为一个单元格,则拆分时自动拆分为两;把三个单元格合并为一个单元格,拆分时自动拆分为三个,其它的以此类推。

 

(二)方法二:快捷键法

Excel拆分单元格快捷键为 Alt + H + M + U,操作方法为:选中 A1:C1 单元格,按住 Alt 键,按一次 H,按一次 M,再按一次 U,则 A1:C1 被重新拆分为三个单元格,操作过程步骤,如图2所示:

Excel拆分单元格快捷键

图2

提示:由于拆分后的单元格缺少边框,所以看起来三个单元格依然为一个,但文字已经移到了 A1 单元格;如果要给拆分后的单元格加上边框,可以按 Ctrl + 1 组合键,选择“边框”选项卡,点击外边框上的图标,单击“确定”即可。

 

二、Excel拆分单元格内容

(一)用“分列”的“分隔符”拆分

1、假如要把服装表的“编号”列拆分为两列。右键第二列顶部的 B,在弹出的菜单中选择“插入”,则在第一列与第二列之间插入一列;单击 A 选择 A 列,选择“数据”选项卡,单击“分列”,打开“文本分列向导”窗口,“请选择最合适的文件类型”选择“分隔符号”,单击“下一步”,勾选“其他”,在其右边输入 -,单击“下一步”,单击“完成”,则第一列被从短横处拆分为两列;操作过程步骤,如图3所示:

Excel拆分单元格内容

图3

2、从拆分结果可以看出,拆分后拆分符(-)没有了,如果把一个字作为拆分符也是一样。另外,“文本分列向导”中提供了四种拆分符,分别为“Tab键、分号、逗号和空格”,如果要拆分的内容以其中某个符号居多,可以选它作拆分符。

 

(二)用“分列”的“固定宽度”拆分,可以拆分为二列或三列以上

1、右键 F 列字母 F,在弹出的菜单中选择“插入”,在 E 列右边插入一列;选中 E 列,选择“数据”选项卡,单击“分列”,打开“文本分列向导”窗口,“请选择最合适的文件类型”选择“固定宽度”,单击“下一步”,把鼠标移到要拆分处对应的标尺处,单击一下,则出现一个指向标尺的箭头,往右拖一点以使箭头恰好处于要拆分处,单击“下一步”,被拆分为的两部分左边加上黑色的背景,可以据此确认是否按要求拆分了,如果符合要求,单击“完成”,如果不符合要求,可以单击“上一步”继续调整,这里已经拆分好了,单击“完成”,则一列被拆分为两列;操作过程步骤,如图4所示:

Excel用分列的固定宽度拆分,可以拆分为二列或三列以上

图4

2、如果要拆分为三列,在“文本拆分向导”窗口的“标尺处”多单击一次就会又出现一个箭头,其它的以此类推。“固定宽度”拆分适用于数据分布均匀对齐的列。

 

(三)用公式拆分,适用于数据分布不均匀的列

1、拆分列有明显字符的实例

(1)假如要把价格列拆分为数字列与单位列。选中 G2 单元格,把公式 =LEFT(E2,FIND("元",E2)-1) 复制到 G2,按回车,返回 86.9,则E2 价格的数字被拆分到 G2,把鼠标移到 G2 右下角的单元格填充柄上,按住左键,往下拖,则价格列其它单元格的数字也被拆分到 G 列对应的单元格;把公式 =MID(E2,FIND("元",E2),3) 复制到 H2 单元格,按回车,则 E2 价格的单位被拆分到 H2,同样用往下拖的方法,把价格列其它单元格的单位拆分到 H 列对应的单元格;操作过程步骤,如图5所示:

Excel用公式拆分列,适用于数据分布不均匀的列

图5

(2)公式说明:

A、Left函数的表达式为:=LEFT(Text, [Num_Chars]),Text 为源文本,Num_Chars 为要截取的字符数,可省略;

Find函数的表达式为:=FIND(Find_Text, Within_Text, [Start_Num]),Find_Text 为要找的文本,Within_Text 为源文本,Start_Num 为查找开始位置,可省略。

Mid函数的表达式为:=MID(Text, Start_Num, Num_Chars),Text 为源文本,Start_Num 为开始截取位置,Num_Chars 为截取字符数。

B、公式 =LEFT(E2,FIND("元",E2)-1) 用 FIND("元",E2)-1 找出“元”在文本中的位置,由于要截取到数字,所以要减 1;然后用 Left函数截取数字。

C、公式 =MID(E2,FIND("元",E2),3) 用 FIND("元",E2) 找出要截取的开始位置,然后用 Mid函数从找出的开始位置起截取 3 个字符。

 

2、拆分混杂的字符串实例

(1)假如要拆分由“字母数字 + 汉字 + 数字”组成的字符串为三列。选中 B1 单元格,把公式:
=LEFT(A1,LOOKUP(1,0/((LENB(MID(A1,ROW($1:$15),1))=1)*(LENB(MID(A1,ROW($2:$16),1))=2)),ROW($1:$15)))
复制到 B1,按回车,则 A1 中的内容左边的“字母数字”被拆分到 B1 单元格;把鼠标移到 B1 右下角的单元格填充柄上,按住左键,往下拖一直拖到 B3 单元格,则 A2 和 A3 中的内容的“字母数字”分别被拆分到 B2 和 B3 单元格;操作过程步骤,如图6所示:

Excel拆分单元格内容为字母数字 + 汉字 + 数字混杂的字符串实例

图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所示:

Excel拆分一列为三列

图7

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

Excel把单元格数据拆分为三列

图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。

⑦ 公式变为:=LEFT(A1,6),最后用 Left 从左边截取 A1 中的文字左边 6 个字符,即 WS-560。

 

B、拆分右边部分的公式:=MID(A1,LOOKUP(1,0/(LENB(MID(A1,ROW($1:$15),1))=2),ROW($2:$16)),15)

① LENB(MID(A1,ROW($1:$15),1))=2 返回的值上面已经分析过,结果为{False,False,False,False,False,False,True,True,True,True,True,False,False,False,False},接着用 0 除以数组中的每个元素,返回结果为 {#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!,0,0,0,0,0,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!}。

② ROW($2:$16) 返回 2 到 16 的数组,即 {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16},则公式变为:
=MID(A1,LOOKUP(1,{#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!,0,0,0,0,0,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!},{2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}),15)
接着用 LookUp 在含有 #DIV/0! 的数组中查找 1,由于找不到 1,所以返回小于等于 1 的最大值,又由于有 5 个 0,所以返回最后一个 0,然后根据返回 0 在数组中的位置在 2 到 16 的数组中找与 0 对应位置的值,即第 11 位的值,该值为 12。

③ 公式变为:=MID(A1,12,15),最后用 Mid 把 A1 中的文字从第 12 开始截取,共截取 15 字符,返回 A1 中的文字后面的数字 86.9。提示:Mid函数如果指定的截取字符数大于文本长度,只截取到末尾。

 

C、拆分中间的部分公式:=SUBSTITUTE(SUBSTITUTE(A1,B1,""),D1,"")

公式由两个 SubStitute函数嵌套组成,里面的 SUBSTITUTE(A1,B1,"") 用于替换 B1 的内容,即用“空”替换 A1 中的 B1(用 WS-560 替换“WS-560长袖白衬衫86.9”中“WS-560”);外面的 SubStitute 用于替换 D1 的内容,经 SUBSTITUTE(A1,B1,"") 的替换,公式变为:=SUBSTITUTE("长袖白衬衫86.9",D1,""),再用“空”替换 D1 的文字(86.9),最后返回“长袖白衬衫”。

提示:公式 =SUBSTITUTE(SUBSTITUTE(A1,B1,""),D1,"")可以省略 "",即可这样写:=SUBSTITUTE(SUBSTITUTE(A1,B1,),D1,)。