单个单元格中特定单词的确切频率(不包括后缀和前缀)

时间:2015-08-06 09:41:51

标签: excel excel-formula

我之前在社区的帮助下为此制定了一个很好的解决方案,它工作得很好,但我发现它只能处理后缀词(它不会忽略前缀词)。

公式:

=IF(B1<>"";(LEN(A1)-LEN(SUBSTITUTE(A1;B1&" ";"")))/(LEN(B1)+1)+IF(RIGHT(A1;LEN(B1))=B1;1;0);"")

A 包含句子,多个单词(没有标点符号)
B 包含我想要计算确切频率的单词。
C 这里有公式,我得到结果

样本表:

|              A            |  B   |     C    |
|:-------------------------:|:----:|:--------:|
| boots                     | shoe |     0    |
----------------------------------------------|
| shoe                      | shoe |     1    |
----------------------------------------------|
| shoes                     | shoe |     0    |
----------------------------------------------|
| ladyshoe dogshoe catshoe  | shoe |     3    |
----------------------------------------------|

在C列中,我在第1行,第2行和第3行中得到正确的输出,但不是4 。我希望C4应该返回0而不是3

问题是它与shoexxxxxxxxxxx不匹配(正确)但匹配xxxxxxxxxxxshoe(错误)。

我只希望公式计算shoe的完全匹配,不应计算任何其他字数。

1 个答案:

答案 0 :(得分:1)

你想要这个公式:

=IF(B1<>"",(LEN(A1)-LEN(SUBSTITUTE(A1," "&B1&" ","")))/(LEN(B1)+2),"")+IF(A1=B1,1,0)+IF(LEFT(A1,LEN(B1)+1)=B1&" ",1,0)+IF(RIGHT(A1,LEN(B1)+1)=" "&B1,1,0)

我会用*表示一个空格,以使以下内容更清晰:

有四种情况需要考虑:

  1. string;这个词在两​​边都没有空格(因此是单元格A1
  2. 中唯一的单词
  3. string*;这个词出现在单词列表的开头。
  4. *string;这个词出现在单词列表的末尾。
  5. *string*;这个词就在一个单词列表的中间。
  6. 首先,我们计算*string*的出现次数,将"*string*"替换为"",从旧字符串中减去新字符串的长度,然后除以len(string)+2 }(这是*string*)的长度。

    如果A1正好是string,那么我们会在计数中再添加一个,而且两边都没有空格。

    如果A1string*开头,我们会再添加一个;如果A1*string结尾,我们会再添加一个。