You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Excel公式将指定列非空单元格内容合并到单个单元格(含CHAR(13))

如何用纯Excel公式合并指定列非空单元格并以换行符分隔?

我之前刚好解决过一模一样的需求,给你分两种Excel版本的纯公式方案,完全不用VBA:

方案1:Excel 365/2021/2019(优先推荐)

直接用TEXTJOIN函数就行——这简直是为你的需求量身定做的:

=TEXTJOIN(CHAR(13), TRUE, B:B)

拆解一下参数:

  • CHAR(13):就是你需要的换行分隔符(对应Windows的回车符)
  • TRUE:这个参数设为TRUE,会自动跳过区域里的空单元格,不用你手动筛选非空内容
  • B:B:替换成你要合并的目标列(如果是固定范围比如B1:B100,写具体范围更高效)

拿你的例子测试:B1=test1、B2=test2、B3为空、B4=test4,用这个公式直接输出test1+换行+test2+换行+test4,不管是作为文本框数据源,还是给单元格开启「自动换行」,都能看到完美的换行效果。

方案2:旧版Excel(无TEXTJOIN函数,比如2016及更早)

如果你的Excel版本比较老,不支持TEXTJOIN,可以用数组公式来实现:

方法A:用CONCAT数组公式

输入以下公式后,必须按Ctrl+Shift+Enter完成数组输入(直接按Enter会失效):

=LEFT(CONCAT(IF(B:B<>"", B:B&CHAR(13), "")), LEN(CONCAT(IF(B:B<>"", B:B&CHAR(13), "")))-1)

逻辑很简单:

  1. IF(B:B<>"", B:B&CHAR(13), ""):遍历B列,非空单元格就追加换行符,空单元格返回空文本
  2. CONCAT(...):把所有处理后的内容拼接成一串
  3. LEFT(..., LEN(...)-1):去掉最后多余的那个换行符

方法B:兼容极旧版本(连CONCAT都没有)

如果你的Excel版本实在太老,试试用PHONETIC函数的变通方案:

=LEFT(SUBSTITUTE(TRIM(PHONETIC(IF(B:B<>"", T(B:B)&" ", ""))), " ", CHAR(13)), LEN(SUBSTITUTE(TRIM(PHONETIC(IF(B:B<>"", T(B:B)&" ", ""))), " ", CHAR(13)))-1)

⚠️ 注意:PHONETIC只对文本型内容有效,如果B列有数字,需要先把数字转为文本(比如在数字前加单引号)。

小提示

  • 看不到换行效果?右键目标单元格→「设置单元格格式」→「对齐」,勾选「自动换行」;如果是文本框,也要确保文本框的「自动换行」功能开启。
  • Mac系统下换行符可能需要用CHAR(10)代替CHAR(13),可以根据实际情况调整。

内容的提问来源于stack exchange,提问作者Bulki

火山引擎 最新活动