答案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 中得到您想要的字符串。请参见下面的屏幕截图。