根据您的 Excel 版本,您将有不同的选项。
选项1:TEXTJOIN
我想你正在寻找一个TEXTJOIN
功能。请记住,您只能使用更高版本的 Excel(请参阅文档链接),它可以像这样工作:

中的公式B1
:
=TEXTJOIN(",",TRUE,LEN(FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s")))
注意:这是一个数组公式,您需要使用CtrlShiftEnter
为了使您不需要使用上述组合键,我们可以包括INDEX
:
=TEXTJOIN(",",TRUE,INDEX(LEN(FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s")),))
附加信息:
FILTERXML
此函数需要(根据文档)两个必需的参数:
因为我们想从单元格中返回一个元素(单词)数组,所以我们需要SUBSTITUTE
空格作为结束标签(</..>
)并将其与<..>
字符串开头的开始标签()和另一个结束标签连接起来结尾。
我将不得不依靠对XML
标签的解释来解释为什么<?><?>
有效及其含义,因为就我的测试而言,我可以交换字母或替换为具有相同结果的另一个字母,只要最终Xpath
类似于相同的字符。如果有人能够用对此事的更好解释来补充这个答案,那就太好了。
更多FILTERXML
“技巧”,看这里
TEXTJOIN
如果您是 Office 365 订阅者或拥有 Excel 2019,则可以使用此功能。(根据文档)至少有 3 个必需的参数:
- 一个分隔符,它必须是一个文本字符串,可以是空的,或者是一个或多个用双引号括起来的字符,或者是对有效文本字符串的引用。如果提供了数字,它将被视为文本。
- 第二个参数可以包含
TRUE
orFALSE
并确定您是否要排除/包含空值
- 第三个参数是要连接的文本项。文本字符串或字符串数组,例如单元格区域。
现在这是我们可以将两个函数连接在一起的地方,FILTERXML
返回一个我们可以使用的数组TEXTJOIN
。
INDEX
+LEN
我将不得不一起解释这些功能的使用。我不认为也不LEN
需要INDEX
对他们自己做太多介绍,但他们一起工作得很好。原生会有一种称为隐式交集的力,LEN
当您将值数组传递给函数时,它会阻止返回值数组,在本例中是通过我们的FILTERXML
.
通常,您可以使用以下组合键禁用此机制:CtrlShiftEnter,更广为人知的CSE
.
现在要做INDEX
的是禁用这个隐式交集,使其LEN
能够返回一个数组,从而消除对CSE
公式的需要。INDEX
是具有这种“权力”的功能之一。可以在这里找到关于隐式交集的更深入的解释
选项 2:UDF
如果无法访问,TEXTJOIN
我认为您需要查看使用 UDF,可能如下所示:
Function TEXTJOIN(rng As Range) As String
TEXTJOIN = Join(Application.Evaluate("LEN({""" & Join(Split(rng, " "), """,""") & """})"), ",")
End Function
你可以这样调用它B1
:=TEXTJOIN(A1)
附加信息:
UDF 由三个协同工作的主要机制组成:
JOIN
这个函数有两个参数,其中第一个是必需的:
- 第一个参数是包含子字符串的一维数组
- 第二个(可选)参数是一个字符串字符,用于分隔返回字符串中的子字符串。如果省略,则使用空格字符 (" ")。如果 delimiter 是长度为零的字符串 (""),则列表中的所有项目都连接起来,没有分隔符。
该函数返回一个字符串值
SPLIT
此函数接受一个字符串并用指定的字符/子字符串分隔它。它采用以下参数:
- 第一个:包含子字符串和分隔符的必需字符串表达式。如果 expression 是零长度字符串(“”),Split 返回一个空数组,即一个没有元素也没有数据的数组。
- 2nd:可选的分隔符,它是一个用于标识子字符串限制的字符串字符。如果省略,则假定空格字符 (" ") 是分隔符。如果 delimiter 是长度为零的字符串,则返回包含整个表达式字符串的单元素数组。
- 3rd:一个可选的限制,要返回的子字符串的数量;-1 表示返回所有子字符串。
- 4th:比较,也是可选的,是一个数值,表示在评估子字符串时要使用的比较类型。有关值,请参阅设置部分。
在这种情况下,我们只需要前两个参数。
Application.Evaluate
这是 IMO 最方便的机制之一,您可以使用它来提取返回的值数组,而无需遍历项目/单元格。当你为函数提供一个大数组公式时,它可能会变慢,但在这种情况下它会很好。该函数将 Microsoft Excel 名称转换为对象或值,当我们将公式传递给它时,它将返回结果。在这种特殊情况下,它将返回一个数组。