在一栏中我有短语,例如Peanut butter jelly time
。我需要知道每个短语中出现了多少个单词(例如B:B)。知道哪个字在范围内会很棒。案件并不重要。
理想情况下,输出看起来像:
短语-------------------------- NumOfWords ----------------字
花生酱果冻时间---------- 2 -----------------------------黄油,时间
韦恩的世界------------------- 1 --------------------- --------世界我尝试了各种公式,包括数组和非数组,以及一些UDF。
更喜欢非VBA解决方案,因为我还是新手,但是非常感谢任何帮助。
答案 0 :(得分:1)
尝试以下用户定义的功能 (UDF):
Public Function WordCounter(phrase As String, llist As String) As Long
Dim s As String, sp As String
Dim mtch As String
WordCounter = 0
sp = " "
s = sp & LCase(Trim(phrase)) & sp
ary = Split(Replace(llist, " ", ""), ",")
For Each a In ary
mtch = sp & a & sp
If InStr(1, s, mtch) > 0 Then
WordCounter = WordCounter + 1
End If
Next a
End Function
空格填充用于避免匹配单词的部分。
用户定义函数(UDF)非常易于安装和使用:
如果保存工作簿,UDF将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx
删除UDF:
从Excel使用UDF:
<强> = WordCounter(A1,C1)强>
要了解有关宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
有关UDF的详细信息,请参阅:
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
必须启用宏才能使其生效!
你的例子:
答案 1 :(得分:1)
对于可能的非VBA解决方案,请尝试以下操作:
named range
,其中包含您要确定它们是否位于A列特定单元格中的短语中的单个单词列表。对于匹配单词的数量,请尝试以下公式:
编辑:编辑公式以消除部分匹配。
B2: =SUMPRODUCT(--ISNUMBER(SEARCH(" " & WordList & " "," " & A2 & " ")))
对于单个匹配的单词,请尝试此array-entered
公式。 (要array-enter
公式,请在按ctrl+shift
确认公式时按住enter
。如果执行此操作,Excel会在公式周围放置大括号{...}
:< / p>
C2: =IFERROR(INDEX(" " & WordList & " ",SMALL(ISNUMBER(SEARCH(" " & WordList & " "," " & $A2 & " "))*ROW(WordList),COLUMNS($A:A)+SUM(--NOT(ISNUMBER(SEARCH(" " & WordList & " "," " & $A2 & " ")))))),"")
然后选择C2并向右填充至少与要返回的单词一样多的单元格,或者直到公式返回空白。然后选择刚刚填充的单元格,并根据需要填写。
C2和向右的公式仅在范围WordList以第1行中的第一个单词开头时才有效(可以在任何工作表的任何列中,但需要从第1行开始)。如果它从另一行开始,则需要相应地调整Row(WordList)
部分。
如果您想要区分大小写匹配,请在上述公式中将SEARCH替换为FIND
这是结果,使用上面的公式:
答案 2 :(得分:0)
要查找的单词数是否有限制?如果是这样,一个解决方案(丑陋,但避免VBA)是使用右侧的隐藏列来检查是否找到了Sheet2中的每个单词,而B1只会添加那些单词。