我在单元格中有一个字符串列表-其中有1000个-并且我需要计算每个单词的字符但要用单词分开-最好以1个快速公式...
例如:
1.“带手柄黑杯”>我需要的公式> 5,3,4,6
“大熊雕像”>我需要的公式> 5,4,6
对于重复执行的任务,我需要这样做,该任务以一种非常低效的方式进行了宏处理,无法将单词计数到列中(对于这种情况,我们最多需要使用20个单词),但这需要解决。
通常,我们计算空格和嵌套的serach()公式的层数,以piggy带到另一个上以破坏结构,然后字符对各个单词进行计数...
我可以选择使用宏来替换逗号和将文本替换为列的空格,但这仍然使我需要长时间的计数过程
我们显然使用=LEN(A1)-LEN(SUBSTITUTE(A1," ",""))
来计算单词中的空格
然后,我们目前将=SEACRH()
函数与=MID()
函数(以及一些奇异的数字)结合使用,以将每个单词显示在其自己的单个单元格中
然后=LEN
再次对所有单个词进行处理-非常long
我希望找到一种更短的方法来执行此操作,但是我觉得仅凭公式可能没有足够动态的方法来执行此操作,希望有人可以证明我做错了!
最佳答案
根据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
此函数(根据文档)采用两个必需的参数:
有效XML中的字符串
有效XPath中的字符串
因为我们要从单元格返回元素(单词)的数组,所以我们需要
SUBSTITUTE
结束标记(</..>
)的空格,并在开始处将其与开始标记(<..>
)连接起来字符串和结尾处的另一个结束标记。我必须依靠标签上的
XML
解释<?><?>
的工作原理及其含义,因为就我的测试而言,我可以交换字母或将其替换为效果相同的另一个字母因为最后一个Xpath
类似于相同的字符。如果有人能够用对此问题的更好解释来补充这个答案,那就太好了。有关更多
FILTERXML
“技巧”,请查看hereTEXTJOIN
如果您是Office 365订阅者或自己的Excel 2019,则可以使用此功能。根据文档,至少有3个必需参数:
分隔符,必须是文本字符串,可以为空,也可以是一个或多个用双引号引起来的字符,或者是对有效文本字符串的引用。如果提供了数字,它将被视为文本。
第二个参数可以包含
TRUE
或FALSE
,并确定是否要排除/包括空值第三个参数是要连接的文本项。文本字符串或字符串数组,例如一系列单元格。
现在,在这里我们可以将两个函数结合在一起,
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由三个相互配合的主要机制组成:
here
此功能具有两个参数,其中第一个是必需的:
第一个参数是包含子字符串的一维数组
第二个(可选)参数是一个字符串字符,用于分隔返回的字符串中的子字符串。如果省略,则使用空格字符(“”)。如果定界符是零长度的字符串(“”),则列表中的所有项目都将没有定界符连接在一起。
该函数返回一个字符串值
JOIN
此函数采用字符串,并用指定的字符/子字符串定界。它采用以下参数:
1st:必需的字符串表达式,包含子字符串和定界符。如果expression是长度为零的字符串(“”),则Split返回一个空数组,即没有元素和数据的数组。
2nd:可选的定界符,它是一个字符串字符,用于标识子字符串限制。如果省略,则假定空格字符(“”)为定界符。如果定界符是零长度的字符串,则返回包含整个表达式字符串的单元素数组。
第三:可选限制,要返回的子字符串数; -1表示返回所有子字符串。
第四:比较(也是可选的)是一个数字值,指示评估子字符串时要使用的比较类型。有关值,请参见“设置”部分。
在这种情况下,我们只需要前两个参数。
SPLIT
这是IMO上最方便的机制之一,可用于提取返回的值数组而不必遍历项目/单元格。当您向函数提供大数组公式时,它可能变慢,但是在这种情况下就可以了。该功能将Microsoft Excel名称转换为对象或值,当我们将其传递给公式时,它将返回结果。在这种情况下,它将返回一个数组。
关于excel - 有没有一种方法可以计算字符串中每个单词的字符数,并返回以逗号分隔的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58673369/