夜雨聆风学习资料网

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。

试完你会回来的,早知道有这个,我之前白加那么多辅助列了。

相关学习资料