=TEXTBEFORE(A2," ") 返回第一个空格之前的所有内容,所以 Ana Silva 得到 Ana;=TEXTAFTER(A2," ") 返回空格之后的所有内容,即 Silva。把两个公式向下填充,每个全名就都被拆成了两列。
| A | B | C | |
|---|---|---|---|
| 1 | Full name | First | Last |
| 2 | Ana Silva | Ana | Silva |
| 3 | Ben Okafor | Ben | Okafor |
| 4 | Chen Wu | Chen | Wu |
| 5 | Dara Kelly | Dara | Kelly |
| 6 | Eli Novak | Eli | Novak |
修改 A 列中的姓名,另外两列也会跟着变。TEXTBEFORE、TEXTAFTER 和 TEXTSPLIT 需要 Microsoft 365 或 Excel 2024。适用于 Excel 2021 及更早版本的 LEFT 和 FIND 写法在后文。
TEXTSPLIT:把一个单元格拆分成多列
=TEXTSPLIT(A2," ") 在每个空格处切开文本,并把每一段溢出到单独的单元格中。一个公式有多少段就填充多少列:
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Text | ||||
| 2 | Ana Maria Silva | Ana | Maria | Silva | |
| 3 | Paris, Lyon, Nice | Paris | Lyon | Nice |
- 分隔符可以不止一个字符:
", "在逗号加空格处拆分,所以各段开头不会带空格。 - 要给结果留出空间。如果右侧有单元格不是空的,公式就会显示 #SPILL!。
- 拆分出的各段始终是文本,数字也一样,所以 SUM 会跳过它们。需要数字时,在前面加两个负号:
=--TEXTSPLIT(A2,",")。
第三个参数是行分隔符。两个分隔符都给出时,TEXTSPLIT 会用一个单元格构建一张小表:逗号分隔列,分号分隔行。
| A | B | |
|---|---|---|
| 1 | Teams | |
| 2 | Ana,Red;Ben,Blue;Chen,Green | |
| 3 | ||
| 4 | Ana | Red |
| 5 | Ben | Blue |
| 6 | Chen | Green |
另外两种在 Excel 中可用的写法,这里以文本形式列出:
=TEXTSPLIT(A2,,", ") one piece per row: the column delimiter is left out
=TEXTSPLIT(A2,{";",","}) several delimiters in braces: splits at ; or ,
第一种把 excel, formulas, text 变成一列三个单元格,这样就能把输入在一个单元格中的列表转成多行。第二种把 red;green,blue 变成 red、green、blue。
中间名和“姓, 名”格式
TEXTAFTER(A2," ") 返回第一个空格之后的所有内容,所以对 Ana Maria Silva 它返回 Maria Silva。要取最后一个词,就用实例编号 -1 从末尾开始数。对于写成 Silva, Ana 的姓名,改为在逗号加空格处拆分:
| A | B | C | |
|---|---|---|---|
| 1 | Full name | First | Last |
| 2 | Ana Maria Silva | Ana | Silva |
| 3 | Ben Okafor | Ben | Okafor |
| 4 | Chen Li Wu | Chen | Wu |
| 5 | Cher | Cher | |
| 6 | |||
| 7 | Last, First | First | Last |
| 8 | Silva, Ana | Ana | Silva |
找不到分隔符时,TEXTBEFORE 和 TEXTAFTER 返回 #N/A,而 Cher 这样只有一个词的名字没有空格。第 5 行用到了第六个参数,即找不到时要返回的值:=TEXTBEFORE(A5," ",,,,A5) 返回整个名字,TEXTAFTER(...,"") 返回空单元格。
| A | B | C | |
|---|---|---|---|
| 1 | User | Domain | |
| 2 | ana.silva@coddy.tech | ana.silva |
轮到你了: 在 C2 中返回 A2 中邮箱地址的域名,也就是 @ 之后的所有内容。
在旧版 Excel 中拆分姓名
没有 TEXTBEFORE 和 TEXTAFTER 时,先用 FIND 找到空格的位置,再用 LEFT、MID 和 RIGHT 在它两侧截取:
| A | B | C | |
|---|---|---|---|
| 1 | Full name | First | Last |
| 2 | Ana Silva | Ana | Silva |
| 3 | Ben Okafor | Ben | Okafor |
| 4 | Chen Wu | Chen | Wu |
FIND(" ",A2)是空格的位置:在Ana Silva中是 4。LEFT(A2,4-1)取它之前的 3 个字符。MID(A2,4+1,100)从空格之后开始,最多取 100 个字符。100 只是表示“比任何名字都长”;=RIGHT(A2,LEN(A2)-FIND(" ",A2))用精确的长度得到同样的结果。
没有空格时,这些公式返回 #VALUE!。把它们放进 IFERROR,写成 =IFERROR(LEFT(A2,FIND(" ",A2)-1),A2),就会改为返回整个单元格的内容。
| A | B | |
|---|---|---|
| 1 | Code | Prefix |
| 2 | KT-1043-BLUE |
轮到你了: 在 B2 中用 LEFT 和 FIND 返回产品代码中第一个短横线之前的部分。
分列和快速填充
不用公式,一次性拆分一列:
- 选中全名所在的列。确保它右侧的列是空的,因为“分列”会覆盖它们。
- 选择“数据 > 分列”。
- 选择 分隔符号,点击“下一步”,勾选 空格(或逗号,或在 其他 中输入别的字符),点击“下一步”。
- 第一段会替换原来的全名。如果想保留全名,就把 目标区域 设为它们右侧的空单元格,然后点击“完成”。
按某种规律拆分时,快速填充更快:在 Ana Silva 旁边输入 Ana,按 Enter 键,再按 Ctrl+E 或选择“数据 > 快速填充”,Excel 就会填好其他行的名字。这两个工具写入的都是固定的值。之后姓名改了,拆分结果不会跟着变;公式则会。
常见问题
Excel 中怎样把名字和姓氏分开?
A2 中是 Ana Silva 这样的姓名时,=TEXTBEFORE(A2," ") 得到 Ana,=TEXTAFTER(A2," ",-1) 得到 Silva,即使中间还有中间名也没问题。在 Excel 2021 及更早的版本中,用 =LEFT(A2,FIND(" ",A2)-1) 提取名字。
哪些 Excel 版本有 TEXTSPLIT?
Microsoft 365、Excel 网页版和 Excel 2024 中有 TEXTSPLIT、TEXTBEFORE 和 TEXTAFTER。Excel 2021 及更早的版本显示 #NAME?;这些版本中请用 LEFT、MID、RIGHT 和 FIND,或者“数据 > 分列”。
Excel 中怎样按逗号拆分一个单元格?
=TEXTSPLIT(A2,", ") 把每一段溢出到单独的列中。如果想把各段放到不同的行,就把列分隔符留空:=TEXTSPLIT(A2,,", ")。
TEXTBEFORE 为什么返回 #N/A?
单元格中没有分隔符,比如只有一个名字,没有空格。在第六个参数中给出这种情况下要返回的值:没有空格时,=TEXTBEFORE(A2," ",,,,A2) 返回整个单元格的内容。