计算单元格中范围内的单词数

时间:2015-04-17 18:40:48

标签: excel

在一栏中我有短语,例如Peanut butter jelly time。我需要知道每个短语中出现了多少个单词(例如B:B)。知道哪个字在范围内会很棒。案件并不重要。

理想情况下,输出看起来像:

短语-------------------------- NumOfWords ----------------字

花生酱果冻时间---------- 2 -----------------------------黄油,时间

韦恩的世界------------------- 1 --------------------- --------世界

我尝试了各种公式,包括数组和非数组,以及一些UDF。

更喜欢非VBA解决方案,因为我还是新手,但是非常感谢任何帮助。

3 个答案:

答案 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)非常易于安装和使用:

  1. ALT-F11调出VBE窗口
  2. ALT-I ALT-M打开了一个新模块
  3. 粘贴内容并关闭VBE窗口
  4. 如果保存工作簿,UDF将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx

    删除UDF:

    1. 按上述方式调出VBE窗口
    2. 清除代码
    3. 关闭VBE窗口
    4. 从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

      必须启用宏才能使其生效!

      你的例子:

      enter image description here

答案 1 :(得分:1)

对于可能的非VBA解决方案,请尝试以下操作:

  • 短语在A栏
  • WordList是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

这是结果,使用上面的公式:

enter image description here

答案 2 :(得分:0)

要查找的单词数是否有限制?如果是这样,一个解决方案(丑陋,但避免VBA)是使用右侧的隐藏列来检查是否找到了Sheet2中的每个单词,而B1只会添加那些单词。