如何计算Excel中多个单元格中一系列文本字符串中的关键字?

时间:2016-07-07 14:03:33

标签: excel excel-formula

我在这里通过在Excel中使用SEARCH或FIND找到了类似的想法,但这些似乎更多的是关于找到关键字的位置,而不是计算它出现的次数。

我有一张快照列表的CSV。每个镜头都与一个序列相关联,每个镜头都有一组“标签”(这是文本字符串)。请参阅下面的示例:

enter image description here

我想跟踪两个主要关键词:“dog”和“fox”。每个序列有多个镜头,我的目标是弄清楚每个序列有多少个镜头有“dog”标签,有多少镜头有“fox”标签。我需要的公式是突出显示为黄色的列,并且我已手动输入前几个要素以了解应该在哪个数字。填好之后,我可以计算每个序列的比例,其中“狗”或“狐狸”的标记更多。

我不能在Excel中使用文本到列来轻松分解文本字符串列,因为每个列都包含不同的标记系列(我的示例文本有点说明)。

如果文本列中只有“dog”或“fox”,我已经找到了一个简单的公式来计算我想要的数量,但是我无法弄清楚如何让Excel在文本中找到一个单词字符串并计算它。

=SUMIFS(D:D,B:B,1,F:F,"dog")

1是序列号,其余列引用我的较大数据表。

任何帮助都将非常感谢!!

编辑: 这里以文本形式表格(抱歉格式化,无法从工作ATM上传文件):

COUNTER      SAMPLE DATA
Sequence    Total Fox   Total Dog   Total Entries   Ratio Fox   Ratio Dog       Sequence    Shot    Text
1   2   2   4   0.5 0.5     1   mov_101 The quick brown fox
2   3   2   5   0.6 0.4     2   mov_102 jumps over the lazy dog
3           4               3   mov_103 The fox and the hound
4           2               4   mov_104 fox news
5           3               5   mov_105 I am a dog
                            1   mov_106 The fox and the hound
                            2   mov_107 jumps over the lazy dog
                            3   mov_108 The fox and the hound
                            4   mov_109 jumps over the lazy dog
                            5   mov_110 I am a dog
                            1   mov_111 jumps over the lazy dog
                            3   mov_112 The fox and the hound
                            5   mov_113 The fox and the hound
                            2   mov_114 jumps over the lazy dog
                            2   mov_115 fox news
                            1   mov_116 I am a dog
                            3   mov_117 I am a dog
                            2   mov_118 The fox and the hound

3 个答案:

答案 0 :(得分:1)

有人可能会有比这更好的解决方案,但我在寻找类似的功能之前就已经使用过了,但找不到它。

=(LEN([textcell]) - LEN(SUBSTITUTE([textcell], [wordcell], ""))) / LEN([wordcell])

这样做是比较原始字符串的长度,以及删除了搜索字的字符串的长度。将它除以单词的长度,给出删除的次数。

所以给出以下内容:

fox dog search
1   0   The quick brown fox
0   1   jumps over the lazy dog

A2上的公式是

=(LEN($C2) - LEN(SUBSTITUTE($C2,A$1, ""))) / LEN(A$1)

不需要美元符号,但是我可以将公式复制到所有4个单元格。

答案 1 :(得分:1)

您已接近,您需要使用 COUNTIFS 而不是 SUMIFS 来获取序列计数。并使用 "*" 围绕 fox dog 来考虑周围的单词。

以下是我用来获取狐狸数量的公式:

=COUNTIFS($H:$H,$A2,$J:$J,"*fox*")  

将此公式放在单元格 B2 中并向下拖动。
同样,下面的公式将为您提供每个序列的狗数:

=COUNTIFS($H:$H,$A2,$J:$J,"*dog*")  

将此公式放在单元格 C2 中并向下拖动。

所以我尝试复制你的数据,这就是我用过的东西:

enter image description here

如果您有任何疑问,请告诉我。

答案 2 :(得分:0)

如果您的序列列是E,而带有文本的列是F,则可以使用以下公式:

=SUMPRODUCT(--(NOT(ISERROR(SEARCH(B$1,$F$2:$F$6)))),--($E$2:$E$6=$A2))

这会创建两个数组,一个是1&1 39的序列,其中1是文本包含B1(" fox"或" dog& #34;),另一个为1,用于序列匹配,0为非序列匹配。

然后它将数组相乘并求和,这样你只得到两个条件匹配时的计数。

公式在我的例子中的单元格B2:C3中:

我使用的示例数据图片:sample data