Excel COUNTIF,带字符串,以逗号分隔

Excel COUNTIF,带字符串,以逗号分隔,excel,excel-formula,formula,countif,Excel,Excel Formula,Formula,Countif,我正在尝试编写一个简单的公式来计算某个特定名称在列中出现的次数。我使用的是COUNTIF,因为这是一个非常简单的过程,但我无法解决如何让一个特定的名字发生这种情况。情况就是这样: 名为Age的列将显示具有一个或多个名称的单元格,如果有多个值,则用逗号分隔。以“Young”为例,很容易告诉COUNTIF公式,告诉我这个单词出现的次数,它是单元格中唯一的值,或者是字符串值较长的单元格的一部分,方法是给公式一个“Young”语句 当我想让公式计算“成熟”在我的专栏中出现的次数时,问题就来了。我想不出

我正在尝试编写一个简单的公式来计算某个特定名称在列中出现的次数。我使用的是
COUNTIF
,因为这是一个非常简单的过程,但我无法解决如何让一个特定的名字发生这种情况。情况就是这样:

名为Age的列将显示具有一个或多个名称的单元格,如果有多个值,则用逗号分隔。以“Young”为例,很容易告诉
COUNTIF
公式,告诉我这个单词出现的次数,它是单元格中唯一的值,或者是字符串值较长的单元格的一部分,方法是给公式一个“Young”语句

当我想让公式计算“成熟”在我的专栏中出现的次数时,问题就来了。我想不出一个办法,只有当它说“成熟”的时候,它才算数,而不把所有的“早熟”或“半成熟”都算上

我知道这对任何了解Excel基础知识的人来说都很容易,所以我认为没有必要给出更多细节


大多数时候,我都是通过在主字符串的开头和结尾添加相同的分隔符成功地解决了这些问题

因此,由于您的数据位于
COL:Y
,您可以创建一个新的助手
COL:Z
,并输入以下公式:

="," & Y1 & ","
我没有在逗号之前或之后使用任何空格,因为您的数据似乎没有任何空格。根据您的情况,您可能必须使用空格

现在字符串用逗号包装,您可以将
COUNTIF
公式更改为:

=COUNTIF(Z:Z,"*,"&B1&",*")

*
字符是在本上下文中代表“任何东西”的小丑。

要获取
成熟
的出现次数,不包括有前缀的字符,可以使用以下数组公式:

=SUM(((LEN(A2:A7)-LEN(SUBSTITUTE(A2:A7,"Mature",""))) / LEN("Mature"))-((LEN(A2:A7)-LEN(SUBSTITUTE(A2:A7,"_Mature",""))) / LEN("_Mature")))
请注意,此公式是使用Ctrl+Shift+Enter组合键应用的


假设您的范围在
Y:Y
列中,只需将范围更改为您需要的范围。

使用自定义项即可。代码进入一个标准模块,使用Alt+F11打开VBE,然后在项目资源管理器中右键单击并添加模块


代码

Option Explicit

Public Function GetCount(ByRef selectRange As Range, ByVal searchTerm As String) As Long
    Application.Volatile
    With selectRange

        Dim arr(), joinedString As String, i As Long, outputCount As Long
        arr = .Value

        joinedString = Join(Application.WorksheetFunction.Transpose(Application.WorksheetFunction.Index(arr, 0, 1)), ",")

        Dim arr2() As String
        arr2 = Split(joinedString, ",")

        For i = LBound(arr2) To UBound(arr2)
            If Trim$(arr2(i)) = "Mature" Then
                outputCount = outputCount + 1
            End If
        Next i
    End With

    GetCount = outputCount

End Function

表中的用法


另一种选择是将“成熟”改为“完全成熟”。然后可以使用Countif()

您必须分步骤执行此操作:
1) 将“早熟”改为“成熟”
2) 将“半成熟”更改为“S\u M”
3) 将“成熟”更改为“完全成熟”
4) 与步骤1相反)。

5) 与第2步相反)。

感谢所有人的回答,不幸的是,它必须不创建额外的列,尽管我是VBA的忠实粉丝,但我发现这个非常有用。谢谢你,伙计;)