计算在一个范围内的单元格中的字数

在一个专栏中,我有几个例如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)非常易于安装和使用:

  1. ALT-F11调出VBE窗口
  2. ALT-I ALT-M打开一个新的模块
  3. 粘贴东西,closuresVBE窗口

如果保存工作簿,则UDF将随之保存。 如果您在2003年以后使用的是Excel版本,则必须将该文件另存为.xlsm而不是.xlsx

要删除UDF:

  1. 如上所示调出VBE窗口
  2. 清除代码
  3. 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将简单地加起来。