Excel – 在行和逗号分隔的单元格中计数

我有一个数据表,我要计算一列中所有单词的出现次数。 但是列可以包含用逗号分隔的几个单词。

False Negative False Negative, False Positive 

这是一个例子。 结果列只能包含以下expression式:

 False Negative False Positive Positive 

所以我想根据上面的例子组成一个结果列:

 False Negative 2 False Positive 1 

这样我可以从这些值中绘制图表。

我不是很擅长Excel,但我知道如何inputexpression式而不是如何编写逻辑。

谢谢

编辑:

我不希望“积极”的字眼是“假阳性”。 它需要寻找逗​​号。

从你的例子来看,你想要统计数据中某些短语的出现,而不仅仅是单词。 如果是这样的话,这些短语是非排他性的,那么下面的公式可能工作:

Rng是你的列的范围,例如$ A $ 1:$ A $ 100 G1包含感兴趣的短语,例如False Positive

 =SUMPRODUCT((LEN(Rng)-LEN(SUBSTITUTE(Rng,G1,"")))/LEN(G1)) 

并根据需要填写。

请注意,以上将计为2的“积极”的数量,因为“积极”是误报的一部分。 如果你想要不同的东西,你需要告诉我们你想要什么。

编辑由于你现在表明你不想把False Positive作为Positive的一个实例,所以我会提供一个User Defined Function来检查是否用逗号分隔。

要input这个用户自定义函数(UDF), alt-F11打开Visual Basic编辑器。 确保您的项目在“项目浏览器”窗口中突出显示。 然后,从顶部菜单中select插入/模块,然后将下面的代码粘贴到打开的窗口中。

要使用这个用户定义函数(UDF),input一个像

 =FindPhrase(Rng,G1) 

在一些细胞。

 Option Explicit Function FindPhrase(SearchRange As Range, Phrase As String) As Long Dim RE As Object, MC As Object Dim sPat As String Dim V As Variant Dim I As Long, J As Long V = SearchRange Set RE = CreateObject("vbscript.regexp") With RE .Global = True .MultiLine = True .ignorecase = True .Pattern = "(?:^|,\s*)" & Phrase & "(?:\s*,|$)" End With For I = 1 To UBound(V, 1) If RE.test(V(I, 1)) Then J = J + 1 Next I FindPhrase = J End Function 

EDIT2如果在每个单元格中可能有多个短语的单个实例,并且您想分别对它们进行计数,则在上面,

 .Pattern = "(?:^|,\s*)Positive(?=(?:\s*,|$))" 

或者使用以下不同的UDF(也可以很容易地将其调整为只计算一个实例,并且运行速度可能比第一个快):

 Option Explicit Function FindPhrase2(SearchRange As Range, Phrase As String) As Long Dim V As Variant Dim I As Long, J As Long, K As Long Dim aStrings As Variant V = SearchRange For I = 1 To UBound(V) aStrings = Split(V(I, 1), ",") If IsArray(aStrings) Then For J = 0 To UBound(aStrings) If Trim(aStrings(J)) = Trim(Phrase) Then K = K + 1 Next J Else If Trim(aStrings) = Trim(Phrase) Then K = K + 1 End If Next I FindPhrase2 = K End Function