计算在一个范围内的单元格中的字数
在一个专栏中,我有几个例如Peanut butter jelly time
。 我需要知道一个范围内有多less个单词(如B:B)出现在每个短语中。 知道哪些单词在范围内是很棒的。 情况并不重要。
理想情况下,输出结果如下所示:
短语————————– NumOfWords —————-词
花生酱果冻时间———- 2 —————————–黄油,时间
韦恩的世界——————- 1 —————————- -世界
我已经尝试过各种公式,包括数组和非数组,以及一些UDF。
宁愿一个非VBA的解决scheme,因为我还是一个新手,但任何帮助,非常感激。
尝试使用以下用户定义函数 (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)非常易于安装和使用:
- ALT-F11调出VBE窗口
- ALT-I ALT-M打开一个新的模块
- 粘贴东西,closuresVBE窗口
如果保存工作簿,则UDF将随之保存。 如果您在2003年以后使用的是Excel版本,则必须将该文件另存为.xlsm而不是.xlsx
要删除UDF:
- 如上所示调出VBE窗口
- 清除代码
- closuresVBE窗口
从Excel中使用UDF:
= WordCounter(A1,C1)
要了解有关macros的更多信息,请参阅:
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
macros必须启用这个工作!
你的例子:
对于可能的非VBA解决scheme,请尝试以下操作:
- 短语在列A中
- WordList是一个
named range
,它包含一列单个单词,您要确定它们是否在列A中特定单元格中的短语中。
对于匹配的单词数量,试试这个公式:
编辑:公式编辑,以消除部分匹配。
B2: =SUMPRODUCT(--ISNUMBER(SEARCH(" " & WordList & " "," " & A2 & " ")))
对于单个匹配的单词,试试这个array-entered
公式。 (要array-enter
公式,按住enter
键确认公式,按住ctrl+shift
,如果这样做正确,Excel会在公式中放置大括号{...}
C2: =IFERROR(INDEX(" " & WordList & " ",SMALL(ISNUMBER(SEARCH(" " & WordList & " "," " & $A2 & " "))*ROW(WordList),COLUMNS($A:A)+SUM(--NOT(ISNUMBER(SEARCH(" " & WordList & " "," " & $A2 & " ")))))),"")
然后selectC2并至less填充与单词返回一样多的单元格,或者直到公式返回空白为止。 然后select刚刚填满的单元格,然后按需要填写。
笔记
-
C2和右边的公式只有在WordList的范围从第一行的第一个字开始(可以在任何工作表上的任何一列,但需要从第一行开始)的情况下才能起作用。 如果它从另一行开始,
Row(WordList)
部分将需要相应地进行调整。 -
如果您想区分大小写的匹配,请在上面的公式中用FINDreplaceSEARCH
这是结果,使用上面的公式:
查询的字数是否有限制? 如果是这样,一个解决scheme(丑陋,但避免VBA)是使用右侧的隐藏列来检查是否findSheet2中的每个单词,而B1将简单地加起来。