将多个“动态”行合并为一个单元格

将多个“动态”行合并为一个单元格

我需要将 A 列中的一系列单元格合并为 B 列中的一个单元格,这些单元格的范围是动态的。我该如何合并这些单元格?

请查看图片以获得更清晰的说明)

我尝试实现这个

=IF(A6="",LEFT(A5,FIND(C6,A5)+(LEN(C6)-1)))    

但它没有作用。

例子

答案1

我建议的解决方案是,您只需要在数据顶部留下一个空白单元格,如样本所示。

如果您有 Office 365,则可以无缝使用 TEXTJOIN 函数。但是,大多数版本的 Excel 没有此内置函数,您可能需要自己用 VBA 编写一个。您可以在互联网上自由找到 VBA 版本,例如,其中一个参考资料是这里

按 ALT + F11 访问 VBA 编辑器。插入模块并将以下代码粘贴到其中。

Function TEXTJOIN1(delimiter As String, ignore_empty As Boolean, ParamArray cell_ar() As Variant)
    For Each cellrng In cell_ar
        For Each cell In cellrng
            If ignore_empty = False Then
                result = result & cell & delimiter
            Else
                If cell <> "" Then
                    result = result & cell & delimiter
                End If
            End If
        Next cell
    Next cellrng
    TEXTJOIN1 = Left(result, Len(result) - Len(delimiter))
End Function

这将创建一个名为 TEXTJOIN1 的自定义 VBA 用户定义函数。它接受 3 个参数:分隔符、忽略空标志和范围。

在此示例中,样本数据位于单元格 B2:B14 中。B1 故意留空。

将以下公式放入 C2 中,然后在公式栏中按 CTRL + SHIFT + ENTER 以创建数组公式。现在,公式应括在花括号中,以表明它是一个数组公式,然后将其沿着列的长度向下拖动。

=IF(ISBLANK(B2),TEXTJOIN1(",",FALSE,OFFSET(B2,-(ROW()-MAX(IF(ISBLANK($B$1:B1),ROW($B$1:B1),0))-1),0):OFFSET(B2,-1,0)),"")

在此处输入图片描述

更新:

上述解决方案假设数据集之间只有一个空白。但是,如果您有多个空白,并且希望公式仍然有效,请使用以下数组公式。

=IF(AND(ISBLANK(B2),NOT(ISBLANK(OFFSET(B2,-1,0)))),TEXTJOIN1(",",TRUE,OFFSET(B2,-(ROW()-MAX(IF(ISBLANK($B$1:B1),ROW($B$1:B1),0))-1),0):OFFSET(B2,-1,0)),"")

在此处输入图片描述

相关内容