如何在指定范围内按每3列使用TEXTJOIN函数合并数据
按每3列批量合并数据到目标单元格(基于TEXTJOIN函数)
核心思路
用TEXTJOIN搭配INDEX、SEQUENCE函数,先按3列一组提取数据并合并每组内容,再将所有组的结果汇总到目标单元格。
公式示例(汇总所有组到单个单元格)
假设你的数据范围是$A$1:$Z$10,在目标单元格输入以下公式:
=TEXTJOIN(CHAR(10),TRUE,TEXTJOIN(" ",TRUE,INDEX($A$1:$Z$10,,SEQUENCE(3,1,3*(ROW(INDIRECT("1:"&INT(COLUMNS($A$1:$Z$10)/3)))-1)+{1,2,3}))))
公式拆解
COLUMNS($A$1:$Z$10):获取数据区域总列数,除以3取整得到总组数ROW(INDIRECT("1:"&INT(...))):生成1到总组数的序列,对应每个3列组的序号3*(...)-1+{1,2,3}:计算每组对应的3列列号(比如第1组对应列1/2/3,第2组对应列4/5/6)- 内层
TEXTJOIN(" ",TRUE,...):将每组的3个单元格用空格连接,可把" "换成你需要的分隔符(如"/") - 外层
TEXTJOIN(CHAR(10),TRUE,...):将所有组的结果用换行分隔,若想用逗号分隔,直接把CHAR(10)换成","
按行单独汇总的公式
如果需要每行单独处理(每行的3列组合并后汇总到对应行的目标单元格),公式调整为:
=TEXTJOIN(CHAR(10),TRUE,TEXTJOIN(" ",TRUE,INDEX($A1:$Z1,,SEQUENCE(3,1,3*(COLUMN(INDIRECT("1:"&INT(COLUMNS($A1:$Z1)/3)))-1)+{1,2,3}))))
注意事项
- 把公式里的
$A$1:$Z$10或$A1:$Z1替换成你的实际数据范围 - 若数据列数不是3的整数倍,公式会自动忽略最后不足3列的部分
- 用换行分隔时,要开启目标单元格的「自动换行」功能
内容的提问来源于stack exchange,提问作者Robert Jan Ki
相关产品推荐
相关产品推荐

