ARTICLE · 1267837
Excel办公技巧之TEXTJOIN
Excel办公技巧之TEXTJOIN:一个格子装下所有商品
一个门店下面挂着20个商品,领导说:把这个门店所有卖的商品名称,用逗号给我连到一个格子里。你怎么办?
VLOOKUP吗 别想了它只能返回第一条。
辅助列?先在每个商品后面拼上门店编码,再一个个复制粘贴?20个商品还行,200个呢?
VBA?打开编辑器写代码,改一次还要重新跑
今天给你介绍TEXTJOIN配合上一篇讲的FILTER,一行公式,直接把一对多的内容合并成一条文本。
一、TEXTJOIN是什么?
一句话:你给它一堆内容,它用分隔符帮你拼成一条完整的字符串。
语法就三个参数:
=TEXTJOIN(分隔符, 要不要忽略空值, 要合并的内容)
举个最简单的例子:
A 列是姓名:张三、李四、王五。
你想在一个格子里输出:"张三,李四,王五"。
用 TEXTJOIN:
=TEXTJOIN(",", TRUE, A2:A4)

回车,搞定。
第一个参数 ","用中文逗号当分隔符
第二个参数 TRUE自动跳过空单元格
第三个参数 A2:A4要合并的范围
对比以前的做法:用&一个个拼=A1&","&A2&","&A3。如果有100行呢?拼到明年?
TEXTJOIN就是干这个的,一次合并一整列,想用什么分隔符自己定。
二、核心场景:一对多文本合并,黄金搭档来了,现在回到开头那个痛点。一张订单明细表,几千行。
J列是门店编码,K列是商品名称。
你想做一个查询:输入一个门店编码,自动把这个门店所有卖的商品名,用逗号连到一个格子里。
用 VLOOKUP它只能返回第一个商品。
用 INDEX + MATCH写半天,还是只能返回第一个。
用 TEXTJOIN + FILTER吧
=TEXTJOIN(",", TRUE, FILTER(K:K, J:J=O1))

FILTER负责:从J列里把所有"门店编码 = 1"的商品名筛出来
TEXTJOIN负责:把筛出来的这些商品名,用逗号连起来
你在O1输入1,下面格子里自动输出:"商品A,商品B,商品C,商品D……"
输入2,自动换成2的所有商品。
不用辅助列,不用VBA,不用手动复制粘贴。
这就是为什么说它们是"黄金搭档"FILTER负责筛选行,TEXTJOIN负责合并文本,两个函数一拼,所有"一对多"的文本问题都解决了。
三、进阶:想换行显示?换个分隔符就行
刚才是用逗号连在一起,密密麻麻一大条,不好看。
如果想每个商品单独一行,怎么办?
把分隔符换成 `CHAR(10)` 就行:
=TEXTJOIN(CHAR(10), TRUE, FILTER(U:U, T:T=Y1))

然后把那个单元格设置成 "自动换行"。
效果就是:
商品A
商品B
商品C
商品D
整整齐齐,一目了然。
CHAR(10)是什么?就是换行符。你在单元格按Alt+Enter打出来的那个东西。
四、再加个序号?也不是不行
如果你还想在每个商品前面加序号,比如:
1、商品A
2、商品B
3、商品C
公式稍微改一下:
=TEXTJOIN(CHAR(10),TRUE,ROW(INDIRECT("1:"&COUNTA(FILTER(AC:AC,AB:AB=AG1))))&"、"&FILTER(AC:AC,AB:AB=AG1))

别被这一长串吓到,拆开看:
FILTER(AC:AC, AB:AB=AG1):筛出所有商品名
COUNTA(...):数一下有多少个商品
ROW(INDIRECT("1:"&...)):生成 1、2、3、4……的序号
&"、"序号和商品名之间加个顿号
最外面套 TEXTJOIN:用换行符拼起来
一行公式,自动带序号、自动换行、自动合并。
五、几个容易踩的坑
1.版本要求:老版本没有这个函数
TEXTJOIN是Excel2019及以上Microsoft365才有的函数。
如果你用的是Excel2016或更早的版本,输入`=TEXTJOIN`会提示"未知函数"。
2.TEXTJOIN这个函数,单独用的时候只是"拼字符串",感觉没什么了不起。但它和FILTER一搭配,威力直接翻倍一对多的文本合并,以前要 VBA 才能搞定的事,现在一行公式完事。
如果你还在手动复制粘贴、一个个拼,真的建议试一试 TEXTJOIN。
试完你会回来的,早知道有这个,我之前白加那么多辅助列了。















































































