我在单元格中有一个字符串列表-其中有1000个-我需要计算每个单词的字符,但要用单词分开-最好以1个快速公式...
例如: 1.“带手柄黑杯”>我需要的公式> 5,3,4,6
我需要一个重复执行的任务,该任务已经以一种非常低效的方式进行了宏处理,无法将单词数入列中(在这种情况下,我们最多需要使用20个单词),但这需要解决。
通常,我们对空格和嵌套的serach()公式进行计数,以将其onto带到另一个上以破坏结构,然后字符对各个单词进行计数...
我可以选择使用宏替换逗号的空格,并将文本用于列,但这仍然使我需要寻找长时间的计数过程
我们显然使用=LEN(A1)-LEN(SUBSTITUTE(A1," ",""))
来计算单词中的空格
然后,我们目前将=SEACRH()
函数与=MID()
函数(以及一些奇异的数字)结合使用,以将每个单词显示在其自己的单个单元格中
然后=LEN
再次遍历所有单个单词-long之以鼻
我希望找到一种更短的方法来做到这一点,但是感觉可能没有足够的动态方法来单独使用公式来完成,希望有人可以证明我做错了!
答案 0 :(得分:4)
根据Excel版本,您将有不同的选择。
选项1:TEXTJOIN
我认为您正在寻找TEXTJOIN
函数。只需记住,您只能在更高版本的Excel中使用它(请参阅文档链接),它可以像这样工作:
B1
中的公式:
=TEXTJOIN(",",TRUE,LEN(FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s")))
注意: 这是一个数组公式,您需要使用 Ctrl Shift < kbd>输入
为了使其不再需要使用上面的组合键,我们可以添加一个INDEX
:
=TEXTJOIN(",",TRUE,INDEX(LEN(FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s")),))
其他信息:
此函数(根据文档)带有两个必需的参数:
由于我们要从单元格返回元素(单词)的数组,因此需要SUBSTITUTE
结束标记(</..>
)的空格,并将其与起始标记({ {1}})在字符串的开头,另一个end-tag在结尾。
我将不得不依靠标签上的<..>
来说明XML
起作用的原因及其含义,因为就我的测试而言,我可以交换字母或将其替换为其他字母只要最后一个<?><?>
与相同字符相似,其结果相同。如果有人能够对此问题提供更好的解释来补充这个答案,那就太好了。
如果您是Office 365订阅者或自己的Excel 2019,则可以使用此功能。 (根据文档)至少有3个必需参数:
Xpath
或TRUE
,并确定是否要排除/包括空值现在这是我们可以将两个函数结合在一起的地方,FALSE
返回一个可以在FILTERXML
中使用的数组。
我将不得不一起解释这些功能的用法。我认为TEXTJOIN
和LEN
本身并不需要太多介绍,但是它们在一起可以很好地工作。本地会有一种称为隐式交集的作用力,当您将值数组传递给函数时,将阻止INDEX
返回值数组,在这种情况下,是通过我们的LEN
。
通常,您可以使用以下组合键禁用此机制: Ctrl Shift Enter ,通常称为FILTERXML
。
现在CSE
的工作是禁用此隐式交集,使INDEX
能够返回数组,从而无需LEN
公式。 CSE
是具有此“功能”的功能之一。可以在here
选项2:UDF
无法访问INDEX
,我想您需要使用UDF,可能看起来像下面这样:
TEXTJOIN
您可以在Function TEXTJOIN(rng As Range) As String
TEXTJOIN = Join(Application.Evaluate("LEN({""" & Join(Split(rng, " "), """,""") & """})"), ",")
End Function
中调用它,如下所示:B1
其他信息:
UDF由三个主要机制共同作用:
此功能有两个参数,其中第一个是必需的:
该函数返回一个字符串值
此函数采用字符串,并用指定的字符/子字符串定界。它采用以下参数:
在这种情况下,我们只需要前两个参数。
这是IMO上最方便的机制之一,可用于提取返回的值数组而不必遍历项目/单元格。当您向函数提供大型数组公式时,它可能变慢,但在这种情况下就可以了。该功能将Microsoft Excel名称转换为对象或值,当我们将其传递给公式时,它将返回结果。在这种情况下,它将返回一个数组。
答案 1 :(得分:1)
我不确定您要寻找的最终结果,还是您对VBA解决方案是否满意,但这是我的解释:
Function lengths(txt As String) As String
Dim wrd
For Each wrd In Split(txt)
If lengths <> "" Then lengths = lengths & ","
lengths = lengths & Len(wrd)
Next wrd
End Function
将代码粘贴到VBA模块中,然后,例如,如果A1
包含Black Cup With Handle
,则可以在另一个单元格中使用=length(A1)
,这将返回5,3,4,6
。 / p>
答案 2 :(得分:0)
如果您想使用VBA代码,则可以尝试以下操作:
Option Explicit
Sub test()
Dim arr As Variant
Dim str As String
Dim i As Long, j As Long, LastRow As Long
With ThisWorkbook.Worksheets("Sheet1")
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
For i = 1 To LastRow
str = .Range("A" & i).Value
arr = Split(str, " ")
For j = LBound(arr) To UBound(arr)
.Cells(i, j + 3).Value = Len(arr(j))
Next j
Next i
End With
End Sub
结果: