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

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

我需要将 A 列中的一系列单元格合并为 B 列中的一个单元格,这些单元格的范围是动态的。如何合并这些单元格?请参阅图片了解更多解释。

我的情况类似于这个帖子但有一点不同,不同之处在于需要合并的空行位于行上方,如图所示图片

我尝试更改帖子中的公式,但没有成功。

公式为 =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)),"")

需要帮助来修复公式以适合我的情况。

答案1

这是您的解决方案。在此示例中,示例数据位于单元格 B2:B17 中。要使此解决方案有效,您应该在数据之前和数据之后留出一个空白单元格,即本例中的 B1 和 B18。假设范围之间只有一个空白单元格,否则解决方案可能无法正常工作。

如果您的 Excel 版本没有 TEXTJOIN 函数,请使用 VBA 中的以下 UDF 创建一个。按 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

如果您拥有 Excel 2007 及更高版本,请将文件保存为启用宏的工作簿 XLSM。

在单元格 C1 中输入以下公式,并将其向下拖动到列数据的长度。如上所述,第一个单元格和最后一个单元格应为空白。

=IF(ISBLANK(B1),TEXTJOIN1(",",FALSE,OFFSET(B1,1,0):OFFSET(B1,MIN(IF(ISBLANK(B2:$B$18),ROW(B2:$B$18)-ROW(B2),9^99)),0)),"")

在公式栏中按 CTRL + SHIFT + ENTER 创建数组公式。公式应括在花括号中,以表明它是数组公式。

现在将其沿着柱子的长度向下拖动。

在此处输入图片描述

相关内容