Excel根据每行可变起止列拼接单元格内容的实现方案
实现方案
先修正你现有两个公式的语法错误,避免后续调用出错:
- 首个非空列序号公式正确写法:
=MATCH(FALSE, ISBLANK(目标行区域), 0)旧版Excel需按Ctrl+Shift+Enter确认数组公式 - 末尾非空列序号公式正确写法:
=AGGREGATE(14,6,(COLUMN(目标行区域)-COLUMN(区域首列)+1)/(目标行区域<>""),1)你原公式中COLUMN(H6+1)为语法错误,需改为COLUMN(H6)+1计算相对列序号
方案1:Excel 365 / 2021及以上版本(最简方案)
直接使用TEXTJOIN函数嵌套区间引用即可实现需求,以你示例数据的第2行(A2:E2)为例,整合成品公式如下:
=TEXTJOIN(";",FALSE,INDEX(A2:E2,MATCH(FALSE,ISBLANK(A2:E2),0)):INDEX(A2:E2,AGGREGATE(14,6,(COLUMN(A2:E2)-COLUMN(A2)+1)/(A2:E2<>""),1)))
逻辑说明:
- 两个
INDEX分别定位到行内第一个非空、最后一个非空单元格,形成连续区间引用 TEXTJOIN第二参数设为FALSE,保留区间内的空值,按分号分隔拼接- 输出结果完全匹配你的要求:
- 第一行输出:
1;;4;5即你示例的1; ;4;5 - 第二行输出:
2;3;;6即你示例的2;3; ;6 - 第三行输出:
1;;;;3即你示例的1; ; ; ;3
- 第一行输出:
方案2:Excel 2019及更早版本(无TEXTJOIN函数)
需先自定义VBA函数实现带分隔符的区间拼接:
- 按
Alt+F11打开VBA编辑器,依次点击【插入】-【模块】,粘贴以下代码:
Function CONCAT_RANGE(rng As Range, delimiter As String) As String Dim cell As Range Dim result As String result = "" For Each cell In rng If result <> "" Then result = result & delimiter result = result & cell.Value Next cell CONCAT_RANGE = result End Function
- 回到表格界面,使用如下公式即可,旧版Excel需按
Ctrl+Shift+Enter确认:
=CONCAT_RANGE(INDEX(A2:E2,MATCH(FALSE,ISBLANK(A2:E2),0)):INDEX(A2:E2,AGGREGATE(14,6,(COLUMN(A2:E2)-COLUMN(A2)+1)/(A2:E2<>""),1)),";")
内容的提问来源于stack exchange,提问作者ScotCal
相关产品推荐
相关产品推荐

