Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel-计算行和逗号分隔单元格中的出现次数_Excel_Expression - Fatal编程技术网

Excel-计算行和逗号分隔单元格中的出现次数

Excel-计算行和逗号分隔单元格中的出现次数,excel,expression,Excel,Expression,我有一个数据表,我想在其中计算一个单词在列中的所有出现次数。但该列可以包含几个用逗号分隔的单词 False Negative False Negative, False Positive 这是一个例子。结果列只能包含以下表达式: False Negative False Positive Positive 因此,基于上述示例,我想要一个由以下内容组成的结果列: False Negative 2 False Positive 1 通过这种方式,我可以根据这些值绘制图表 我不太擅长Excel,

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

False Negative
False Negative, False Positive
这是一个例子。结果列只能包含以下表达式:

False Negative
False Positive
Positive
因此,基于上述示例,我想要一个由以下内容组成的结果列:

False Negative 2
False Positive 1
通过这种方式,我可以根据这些值绘制图表

我不太擅长Excel,但我知道如何输入表达式,只是不知道如何编写逻辑

谢谢

编辑:


我不想把“假阳性”这个词和“阳性”相提并论。它需要查找逗号

从您的示例来看,似乎您希望统计数据中某些短语的出现次数,而不仅仅是单词。如果是这种情况,且短语是非排他性的,则以下公式可能适用:

Rng是您列的范围,例如$A$1:$A$100 G1包含感兴趣的短语,例如假阳性

=SUMPRODUCT((LEN(Rng)-LEN(SUBSTITUTE(Rng,G1,"")))/LEN(G1))
并根据需要填写

请注意,由于阳性是假阳性的一部分,上述数字将计为阳性数2。如果你想要不同的东西,你需要告诉我们你想要什么

编辑由于您现在表示不希望将假阳性计算为阳性实例,因此我将提供一个用户定义的函数,用于检查以确保所讨论的短语以逗号分隔

要输入此用户定义函数UDF,alt-F11将打开Visual Basic编辑器。 确保项目在“项目资源管理器”窗口中高亮显示。 然后,从顶部菜单中选择插入/模块和 将下面的代码粘贴到打开的窗口中

要使用此用户定义函数UDF,请输入以下公式

=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,该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

嗨,罗恩。我试过你的表情,但总是给我一个错误=我把假阳性这个词放在了E4中。当我说OK时,它标记了位C24,E4,我得到的是标准excel对话框,您键入的公式包含错误。。顺便说一下,请看最新的问题。我不想让假阳性加上阳性。啊哈,用逗号分隔的参数代替不是。。。它的该行应为替换项C4:C24;E4;。但现在我知道名字了?在表达式所在的字段中。我不确定,但您是否定义了Rng?是的,某些非美国版本的Excel将使用分号作为参数分隔符