Excel 365 TEXTJOIN 函数完全指南 — 合并文本从未如此优雅
函数简介
TEXTJOIN 是 Excel 365 新增的文本合并函数,可以将多个单元格或数组中的文本用指定分隔符合并成一个字符串。相比传统的 & 拼接和 CONCATENATE,TEXTJOIN 更强大、更灵活,支持忽略空值、多区域合并。
函数版本:Excel 365(Microsoft 365)及 Excel 2019、Excel 2021 支持。Excel 2016 及更早版本 不支持。
语法结构
=TEXTJOIN(分隔符, 忽略空值, 文本1, [文本2], ...)
| | |
|---|
| 分隔符 | | 合并时插入各文本之间的字符(英文逗号、空格、换行符等) |
| 忽略空值 | | TRUE/1=跳过空单元格,FALSE/0=保留空值 |
| 文本1 | | |
| 文本2... | | |
场景一:基础合并 — 用逗号连接多个姓名
数据:A1=张三,B1=李四,C1=王五,D1=赵六
公式:
=TEXTJOIN(",", FALSE, A1:D1)
结果:张三,李四,王五,赵六
场景二:忽略空值(TEXTJOIN 的核心优势)
数据:A1=苹果,B1=(空),C1=香蕉,D1=橙子
保留空值(FALSE):
=TEXTJOIN(",", FALSE, A1:D1)
结果:苹果,,香蕉,橙子(有空位)
忽略空值(TRUE):
=TEXTJOIN(",", TRUE, A1:D1)
结果:苹果,香蕉,橙子(自动跳过空单元格!)
💡 这是 TEXTJOIN 相比 & 拼接最大的优势——自动忽略空值,不会产生多余的分隔符。
场景三:多区域合并
TEXTJOIN 支持同时引用多个不相邻的区域。
数据:
公式:
=TEXTJOIN("、", TRUE, A1:A5, C1:C5)
结果:销售部、技术部、财务部、人事部张三、李四、王五、赵六
合并两列姓名,中间加分隔
=TEXTJOIN(",", TRUE, A1:A5, B1:B5)
场景四:按条件合并(结合 IF)
只合并符合条件的单元格
数据:A 列是姓名,B 列是部门
=TEXTJOIN("、", TRUE, IF(B1:B10="销售部", A1:A10, ""))
结果:所有销售部成员的姓名,用顿号连接。
💡 关键技巧:IF 数组条件 + TEXTJOIN,实现「筛选后合并」!
进阶:多条件合并
=TEXTJOIN("、", TRUE, IF((B1:B10="销售部")*(C1:C10>10000), A1:A10, ""))
只合并「销售部」且「工资>10000」的员工姓名。
场景五:合并时加引号或括号
普通合并:
=TEXTJOIN(",", TRUE, A1:A10)
带引号:
=TEXTJOIN(",", TRUE, """&A1:A10&"""")
或者用 CHAR(34) 表示引号:
=TEXTJOIN(",", TRUE, CHAR(34)&A1:A10&CHAR(34))
结果:"张三","李四","王五"
带括号
=TEXTJOIN(", ", TRUE, "("&A1:A10&")")
结果:(张三), (李四), (王五)
场景六:用换行符合并(多行文本)
数据:A1=北京,B1=上海,C1=广州
=TEXTJOIN(CHAR(10), TRUE, A1:C1)
结果(设置单元格自动换行后显示):
北京上海广州
💡 CHAR(10) 是换行符,结合单元格自动换行功能可以创建多行列表。
场景七:统计唯一值并合并
数据:A1:A15 包含重复的部门名称
=TEXTJOIN("、", TRUE, UNIQUE(A1:A15))
结果:去重后的所有部门,用顿号连接。
💡 TEXTJOIN + UNIQUE 是提取并合并不重复值的经典组合!
场景八:TEXTJOIN 与 TEXTSPLIT 互逆操作
TEXTJOIN 和 TEXTSPLIT 是互逆函数:
拆分:TEXTSPLIT
=TEXTSPLIT("张三,李四,王五", ",")
→ 结果:张三李四王五(三个单元格)
合并:TEXTJOIN
=TEXTJOIN(",", TRUE, {"张三","李四","王五"})
→ 结果:张三,李四,王五(一个字符串)
场景九:反向查找并合并(结合 XLOOKUP)
假设有「员工表」和「部门表」,要按部门合并该部门所有员工:
=TEXTJOIN("、", TRUE, IF(A2:A10=XLOOKUP(F2, 部门表!A:A, 部门表!B:B), A2:A10, ""))
在 F2 输入部门名,自动列出该部门所有员工!
场景十:动态生成下拉选项列表
数据:A 列是选项列表
生成可用作下拉来源的字符串:
=TEXTJOIN(",", TRUE, A1:A100)
然后:
- 公式 → 定义名称 → 名称:
选项列表,引用:=Sheet1!$A$1(粘贴刚复制的 TEXTJOIN 结果)
💡 注意:这种方法的局限是静态的。更动态的方式参考 TEXTSPLIT 的下拉做法。
场景十一:自动生成地址摘要
数据:
合并完整地址:
=TRIM(TEXTJOIN(" ", TRUE, A1:D1))
💡 TRIM 去掉多余的空格,避免「北京 上海」这样中间多空格的问题。
场景十二:生成 SQL IN 语句
=TEXTJOIN(",", FALSE, "'"&A1:A10&"'")
结果:'张三','李四','王五'
加上括号:
="("&TEXTJOIN(",", FALSE, "'"&A1:A10&"'")&")"
结果:('张三','李四','王五')
💡 用于生成 SQL 查询的 IN 子句,或 Excel 数据导出到数据库!
场景十三:生成 Markdown 列表
=TEXTJOIN(CHAR(10)&"- ", TRUE, A1:A10)
结果:
- 张三- 李四- 王五
场景十四:生成 JSON 数组
="["&TEXTJOIN(",", FALSE, """"&A1:A10&"""")&"]"
结果:["张三","李四","王五"]
💡 生成 JSON 格式数据,可直接用于 API 调用或导出。
场景十五:统计非空单元格数量
虽然这通常用 COUNTA,但结合 LAMBDA 可以:
=TEXTJOIN(",", TRUE, A1:A100)
然后 LEN 减去逗号数量可以推算。
更直接的方法:
=COUNTA(A1:A100)
但 TEXTJOIN 的变体应用:
=LEN(TEXTJOIN(",", TRUE, A1:A100)) - LEN(SUBSTITUTE(TEXTJOIN(",", TRUE, A1:A100), ",", "")) + 1
💡 计算合并后字符串中的分隔符数量 + 1 = 非空项数量。
场景十六:结合 LAMBDA 自定义合并逻辑
只合并数值(忽略文本)
=REDUCE("", A1:A10, LAMBDA(acc, x, IF(ISNUMBER(x), acc&IF(acc="","",",")&x, acc)))
合并并去重排序
=TEXTJOIN("、", TRUE, SORT(UNIQUE(A1:A100)))
场景十七:与其他新函数的组合
| | |
|---|
| =TEXTJOIN(",", TRUE, FILTER(A1:A10, B1:B10>10000)) | |
| =TEXTJOIN("、", TRUE, UNIQUE(A1:A100)) | |
| =TEXTJOIN("、", TRUE, SORT(UNIQUE(A1:A100))) | |
| =TEXTJOIN("、", TRUE, IF(XLOOKUP(...)="条件", 姓名, "")) | |
| =BYROW(A1:D10, LAMBDA(r, TEXTJOIN(",",TRUE,r))) | |
| =TEXTJOIN("-",TRUE,CHAR(64+SEQUENCE(1,3))) | |
常见问题与注意事项
Q1:TEXTJOIN 支持哪些 Excel 版本?
- ✅ Excel 365(Microsoft 365)— 完全支持
- ❌ Excel 2016、2013、2010 及更早版本 — 不支持
⚠️ 注意:Excel 2016 和 2019 是不同版本!Excel 2019 才引入 TEXTJOIN,2016 没有。
Q2:分隔符可以留空吗?
可以!"" 作为分隔符相当于直接拼接所有文本。
=TEXTJOIN("", TRUE, A1:A10)
Q3:为什么结果出现 #VALUE! 错误?
可能原因:
- 分隔符参数类型错误(分隔符必须是文本,不能是数组)
Q4:和 CONCAT 有什么区别?
Q5:和 CONCAT 怎么选?
Q6:如何换行?
用 CHAR(10) 作为分隔符,并确保单元格启用了「自动换行」。
速查表
| |
|---|
| =TEXTJOIN(",", TRUE, A1:A10) |
| =TEXTJOIN(",", TRUE, A1:D1) |
| =TEXTJOIN(",", FALSE, A1:D1) |
| =TEXTJOIN("、", TRUE, A1:A5, C1:C5) |
| =TEXTJOIN(",", TRUE, CHAR(34)&A1:A10&CHAR(34)) |
| =TEXTJOIN(CHAR(10), TRUE, A1:A5) |
| =TEXTJOIN("、", TRUE, UNIQUE(A1:A100)) |
| =TEXTJOIN("、", TRUE, SORT(UNIQUE(A1:A100))) |
| =TEXTJOIN("、", TRUE, IF(B1:B10="销售部", A1:A10, "")) |
| ="("&TEXTJOIN(",", FALSE, "'"&A1:A10&"'")&")" |
| ="["&TEXTJOIN(",", FALSE, """"&A1:A10&"""")&"]" |
| =TEXTJOIN(CHAR(10)&"- ", TRUE, A1:A10) |
| =BYROW(A1:D10, LAMBDA(r, TEXTJOIN(",",TRUE,r))) |
总结
TEXTJOIN 是 Excel 文本处理的另一把利器,核心优势:
- 自动忽略空值——不会产生多余分隔符,这是它相比
& 最大的优势 - 完美搭档 TEXTSPLIT——互为逆操作,拆分和合并自如切换
掌握 TEXTJOIN,让文本合并变得优雅又高效!