连接所有符合条件的单元格 (Excel)

连接所有符合条件的单元格 (Excel)

我有一个如下的电子表格:

一堆文本相互叠放。当一段文本以“fob”开头时,它会与另一个单元格中的所有其他单元格连接在一起

预期结果是所有以特定文本开头的单元格按其出现的次数顺序连接起来。

图中所示的格式不是必需的,但最好如此。不过,每个部分前面的数字 (1, 2, 3) 非常重要。

我曾尝试使用 SUMIF 和 CONCAT 来引用彩虹表和多步骤过程,但最终它们都变得失控、缓慢且不可靠。

如果可能的话,我想不用宏/UDF 来实现,因为我的系统管理员不喜欢它们,但如果没有其他办法的话,那也没问题。

任何帮助都将不胜感激!

答案1

我建议使用少量 VBA 代码和 Excel 2016 的 TEXTJOIN 函数来解决问题。请注意,这在 Excel 2016 及更高版本中有效,但在较低版本中无效。在这种情况下,您必须为 TEXTJOIN 创建 UDF。我指的是您的标签 Excel 2016。

在此示例中,示例数据位于单元格 E4:E15 中。

ALT+F11打开 VBA 编辑器。从插入菜单插入一个模块并将以下代码放入其中。

Function GetString(a1 As String) As String

Dim array1 As Variant
Dim mystring As String

array1 = Split(a1, "|")

For i = LBound(array1) To UBound(array1)

    mystring = mystring & i + 1 & "." & array1(i) & " "

Next i

GetString = mystring

End Function

将 Excel 文件保存为 .XLSM 启用宏的 Excel 工作表。

现在在 F4 中输入以下公式,然后按CTRL+ SHIFT+ENTER创建数组公式。该公式应括在花括号中,以表明它是一个数组公式。

=GetString(TEXTJOIN("|",TRUE,IF(LEFT(E4:E14,3)="fob",RIGHT(E4:E14,LEN(E4:E14)-LEN("fob")),"")))

现在您就得到了所需的字符串。

限制 - 请注意,这里我使用竖线字符“|”作为分隔符。因此,在极少数情况下,如果您的文本本身带有竖线,结果可能不如预期。在这种情况下,请使用可以通过 ALT + 数字键盘获取的字符之一,例如 ALT + 789,例如 §

在此处输入图片描述


如果您更喜欢纯 Excel 公式方法,我建议使用以下基于辅助列的解决方案。

在此示例中,样本数据位于单元格 B3:B13 中。现在在 C3 中输入以下公式,然后按CTRL+ SHIFT+ENTER创建数组公式。现在将其向下拖动到所需的行。

=IFERROR(INDEX($B$3:$B$13,SMALL(IF(LEFT($B$3:$B$13,3)="fob",ROW($B$3:$B$13)-2,""),ROW(A1))),"") 

注意这里的 -2。这很重要,它根据列表开始的相对行将索引值设置为从 1 开始。

此公式将从原始列中创建所需行的传染性列表。

现在在 D3 中输入以下公式,然后在公式栏中按CTRL+ SHIFT+来创建数组公式。ENTER

=TEXTJOIN(",",TRUE,IF(LEN(C3:C13)=0,"",ROW(C3:C13)-2&"."&RIGHT(C3:C13,LEN(C3:C13)-LEN("fob")))) 

现在您应该在 D3 中得到您想要的字符串。请参见下面的屏幕截图。

在此处输入图片描述

相关内容