我需要将 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)),"")