Excel 计算单元格中某一范围内的字数
在一个专栏中,我有一些短语,例如Excel 计算单元格中某一范围内的字数,excel,Excel,在一个专栏中,我有一些短语,例如花生酱果冻时间。我需要知道在一个范围内(例如B:B)有多少单词出现在每个短语中。知道哪些词在这个范围内是很棒的。案子不重要 理想情况下,输出如下所示: 短语------------------NumOfWords------------------Words 花生酱果冻时间-----------------2-----------------黄油,时间 韦恩的世界-------------------1--------------------世界 我尝试过各种公式
花生酱果冻时间
。我需要知道在一个范围内(例如B:B)有多少单词出现在每个短语中。知道哪些词在这个范围内是很棒的。案子不重要
理想情况下,输出如下所示:
短语------------------NumOfWords------------------Words
花生酱果冻时间-----------------2-----------------黄油,时间
韦恩的世界-------------------1--------------------世界
我尝试过各种公式,包括数组和非数组,以及一些自定义项
我更喜欢非VBA解决方案,因为我还是个新手,但非常感谢您的帮助。尝试以下用户定义函数(UDF): 空格填充用于避免单词的匹配部分 用户定义函数(UDF)非常易于安装和使用:
要查找的单词数量有限制吗?如果是这样,解决方案(丑陋,但避免VBA)是使用右侧的隐藏列检查是否找到Sheet2中的每个单词,B1只需将这些单词相加即可。对于可能的非VBA解决方案,请尝试以下操作:
- 短语在A列
- WordList是一个
,其中包含一个单字列表,您需要确定这些单字是否位于a列特定单元格中的短语中命名范围
B2: =SUMPRODUCT(--ISNUMBER(SEARCH(" " & WordList & " "," " & A2 & " ")))
对于单个匹配的单词,请尝试使用此数组输入的公式。(若要数组输入公式,请在点击enter
时按住ctrl+shift
确认公式。如果操作正确,Excel将在公式周围放置大括号{…}
:
C2: =IFERROR(INDEX(" " & WordList & " ",SMALL(ISNUMBER(SEARCH(" " & WordList & " "," " & $A2 & " "))*ROW(WordList),COLUMNS($A:A)+SUM(--NOT(ISNUMBER(SEARCH(" " & WordList & " "," " & $A2 & " ")))))),"")
然后选择C2并向右填充至少与要返回的单词数量相同的单元格,或者直到公式返回空格。然后选择刚刚填充的单元格,并根据需要填充
笔记
- C2和rightward中的公式仅在范围单词列表以第1行的第一个单词开始时有效(可以在任何工作表的任何列中,但需要以第1行开始)。如果它从不同的行开始,则需要相应地调整
行(单词列表)
部分
- 如果需要区分大小写的匹配,请用上述公式中的“查找”替换“搜索”
这是使用上述公式得出的结果:
你确定要非VBA吗?这在VBA中很容易做到!我对你想要什么有点困惑。你想知道短语中出现的单词数吗?所以花生酱果冻时间将返回4。或者你想知道短语中出现的单词列中出现的单词数吗?这相当于我想知道的是,如果我有一个单词列表,例如(黄油、时间、世界、青蛙、笔记本电脑),每个短语中出现了多少个单词,以及哪些单词。如果你能在VBA中实现它,那真是太棒了——只是不知道我是否有实现它的专业知识。如果这个词出现两次,应该算作2??不,一次就够了。谢谢,但这是不可能的。我没有尝试计数C1中的单词-我尝试计数另一张纸上某个范围内的单词(例如“Sheet2”B2:B245)。我尝试命名该范围,但仍然没有成功。当我尝试=WordCount(A1234,“Sheet2”B2:B245)或=WordCount(A1234,列表)时,我得到一个值错误。C1应该是A1中出现的“Sheet2”B2:B245中的单词。希望有意义…@AngelDesjarlais我明天会解决这个问题。嗨,Ron-谢谢你的公式!你的第一个几乎就到了,但不完全到了。我搜索的列表的问题是它可能包含与单元格的部分匹配,例如,它可能是“黄油,巴特,时间,蒂姆”“等等,我需要知道有多少精确匹配。你有办法解决这个问题吗?谢谢
C2: =IFERROR(INDEX(" " & WordList & " ",SMALL(ISNUMBER(SEARCH(" " & WordList & " "," " & $A2 & " "))*ROW(WordList),COLUMNS($A:A)+SUM(--NOT(ISNUMBER(SEARCH(" " & WordList & " "," " & $A2 & " ")))))),"")