如何对指定范围按每3个单元格分组执行Textjoin并忽略空白单元格?
解决大区域单元格按3个一组拼接(忽略空白)的TEXTJOIN方案
方案1:Excel 365/2021 动态数组公式(推荐)
如果用的是支持动态数组的新版本Excel,用LET函数能简化逻辑,处理大区域更高效。假设要处理第1行的A1到ZZ1区域,公式如下:
=TEXTJOIN("-", TRUE, LET( data, A1:ZZ1, filtered, FILTER(data, data<>""), groups, CEILING(SEQUENCE(ROWS(filtered))/3,1), BYROW(UNIQUE(groups), LAMBDA(g, TEXTJOIN("", TRUE, FILTER(filtered, groups=g)))) ))
逻辑说明:
- 先把区域里的空白单元格全部过滤掉,只保留有内容的单元格
- 给过滤后的内容按每3个分配一个组号(第1-3个是组1,4-6是组2,以此类推)
- 逐个处理每个组,用
TEXTJOIN拼接组内的内容,最后再把所有组用-连接起来(你可以把-换成自己需要的分隔符)
如果不需要组之间的分隔符,直接用内层的BYROW结果即可。
方案2:旧版Excel 数组公式
要是用的是没有动态数组的旧版Excel,可以用数组公式(输入后按Ctrl+Shift+Enter确认),同样处理A1:ZZ1区域:
=TEXTJOIN("-",TRUE,IF(MOD(COLUMN(A1:ZZ1)-MIN(COLUMN(A1:ZZ1)),3)=0,TRIM(CONCAT(OFFSET(A1,0,COLUMN(A1:ZZ1)-MIN(COLUMN(A1:ZZ1))-2,1,3))),""))
逻辑说明:
- 先计算每个单元格的相对列位置,标记出每3个单元格的最后一个位置
- 对每个标记位置,取它和前两个单元格组成的区域,拼接这组里的非空白内容
- 最后用
TEXTJOIN把所有有效组用-连接,自动忽略全空白的组
方案3:VBA自定义函数
如果公式满足不了需求,或者需要更灵活的处理,可以写个VBA自定义函数,重复使用更方便:
- 按
Alt+F11打开VBA编辑器,右键点击当前工作簿,选择「插入」→「模块」 - 粘贴以下代码:
Function JoinByGroup(rng As Range, groupSize As Integer, delimiter As String) As String Dim cell As Range Dim currentGroup As String Dim count As Integer Dim result As String count = 0 result = "" currentGroup = "" For Each cell In rng If cell.Value <> "" Then currentGroup = currentGroup & cell.Value count = count + 1 ' 每凑够groupSize个,或者到最后一个单元格时,把当前组加入结果 If count = groupSize Or cell Is rng.Cells(rng.Cells.count) Then result = IIf(result <> "", result & delimiter & currentGroup, currentGroup) currentGroup = "" count = 0 End If End If Next cell ' 如果最后一组不足groupSize但有内容,也要加入结果 If currentGroup <> "" Then result = IIf(result <> "", result & delimiter & currentGroup, currentGroup) End If JoinByGroup = result End Function
- 返回Excel,在单元格里输入
=JoinByGroup(A1:ZZ1,3,"-")就能用了,参数分别是:要处理的区域、每组的单元格数量、组之间的分隔符。这个函数会自动跳过空白单元格,按顺序每3个非空白单元格为一组拼接。
内容的提问来源于stack exchange,提问作者Robert Jan Ki
相关产品推荐
相关产品推荐

