跳到主要内容

批量拆分与合并文本:TEXTSPLIT 与 TEXTJOIN

分列 是一次性操作,改一次要重做一次。TEXTSPLIT(拆)和 TEXTJOIN(合)是公式,源数据变了结果跟着变,适合做成模板。

一、TEXTSPLIT 拆文本​

基本用法:

=TEXTSPLIT(A2,"、")

A2 是 张三、李四、王五,结果横向溢出到三个单元格,形成动态数组。这是 365/2021 版本的行为,会自动向右溢出,不用拖动。

按行拆,加第四个参数:

=TEXTSPLIT(A2,, "、")

第二个参数是列分隔符,第三个是行分隔符。留空表示不用。

多个分隔符同时生效,用数组常量:

=TEXTSPLIT(A2,{",","、",";"})

二、拆成多行多列​

A2 是 张三,90;李四,85;王五,78,逗号分列、分号分行:

=TEXTSPLIT(A2,",",";")

得到 3 行 2 列的区块,一次成型。

忽略空值:

=TEXTSPLIT(A2,"、",,TRUE)

第四参数 TRUE 表示跳过连续分隔符产生的空项。

三、TEXTJOIN 合文本​

=TEXTJOIN("、",TRUE,A2:A10)

两个要点:

  • 第二参数 TRUE 表示忽略空单元格;
  • 结果是一个文本,不是数组。

按条件合并,配合 IF 数组:

=TEXTJOIN("、",TRUE,IF($B$2:$B$100=D2,$C$2:$C$100,""))

这是把"某部门的所有人名"拼成一格的标准写法。老版本需要 Ctrl+Shift+Enter。

四、拆完再合:清洗的常见组合​

原始 A、B、C、A 去重后合并:

=TEXTJOIN("、",TRUE,UNIQUE(TEXTSPLIT(A2,"、")))

排序后合并:

=TEXTJOIN("、",TRUE,SORT(TEXTSPLIT(A2,"、")))

按数字大小排序(比如 2、10、1 要排成 1、2、10):

=TEXTJOIN("、",TRUE,SORT(--TEXTSPLIT(A2,"、"),1,1))

注意 -- 把文本转数值再排序,否则 10 会排在 2 前面。

五、拆出的结果怎么落地​

动态数组是"活"的,源单元格一变就重算。要固定下来:

  1. 选中溢出区域;
  2. 复制;
  3. 原地选择性粘贴"值"。

直接粘贴到别处再删源数据会报 #SPILL! 或 #REF!,先转值最稳。

溢出被挡住的报错 #SPILL!,原因是右侧或下方有内容。清空溢出目标区域即可,不用改公式。

六、和分列的分工​

场景选谁
一次性整理,源数据不再变分列,快
要做成模板反复用TEXTSPLIT
需要按条件合并TEXTJOIN
拆分后还要去重、排序函数组合
拆成不固定列数TEXTSPLIT,分列要手数

分列还有一个隐患:它会覆盖右侧单元格,而且没有撤销提示。函数方案天然安全。

七、常见坑​

  • #NAME?:版本不支持,365/2021 才有这两个函数。WPS 需较新版本。
  • #SPILL!:溢出区域被占用,清空右下方向即可。
  • TEXTJOIN 结果超出 32767 字符:单元格上限,只能分多列输出。
  • 合并后无法再筛选:合并结果是一整串文本,需要保留明细就另建表。
  • 拆出的数字仍是文本:TEXTSPLIT 输出文本,外面套 -- 或 VALUE。

八、速查​

需求公式
按单分隔符拆=TEXTSPLIT(A2,"、")
多分隔符=TEXTSPLIT(A2,{",","、"})
拆行列=TEXTSPLIT(A2,",",";")
忽略空项=TEXTSPLIT(A2,"、",,TRUE)
合并=TEXTJOIN("、",TRUE,A2:A10)
条件合并=TEXTJOIN("、",TRUE,IF(B:B=D2,C:C,""))

TEXTSPLIT + TEXTJOIN 的价值不在单个函数,而在于它们能和 UNIQUE、SORT、FILTER 串起来,把以前要写 VBA 的活儿用公式做完。