【问题标题】:Excel COUNTIF with strings, separated by commaExcel COUNTIF 带字符串,用逗号分隔
【发布时间】:2018-05-31 08:47:35
【问题描述】:

我正在尝试编写一个简单的公式来计算特定名称在列中出现的次数。我正在使用COUNTIF,因为这是一个非常简单的过程,但我无法弄清楚如何让它特别适用于一个名字。是这样的:

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

当我希望公式计算“成熟”出现在我的列中的次数时,问题就来了。我无法找出方法让它只有在它说“成熟”时才算数,而不用把所有的“早期成熟”或“半成熟”都拿走

我知道这对于了解 Excel 基础知识的人来说很容易,所以我认为没有必要提供更多细节。

谢谢

【问题讨论】:

    标签: excel excel-formula formula countif


    【解决方案1】:

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

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

    ="," & Y1 & ","
    

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

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

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

    * 字符是小丑,在这种情况下代表“任何东西”。

    【讨论】:

      【解决方案2】:

      使用 UDF。代码进入标准模块added by 使用 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
      

      在工作表中的使用

      【讨论】:

        【解决方案3】:

        要获取 Mature 的出现次数,不包括那些有前缀的,你可以使用这个数组公式:

        =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 列中,只需将范围更改为您需要的范围即可。

        【讨论】:

        • 感谢大家的回答,不幸的是,它必须不创建额外的列,虽然我是 VBA 的忠实粉丝,但发现这个非常有用。谢谢队友;)
        【解决方案4】:

        另一种方法是将“成熟”更改为“完全成熟”。然后你可以使用 Countif()。

        您必须分步执行此操作:
        1) 将“Early_Mature”改为“E_M”
        2) 将“Semi_Mature”改为“S_M”
        3) 将“成熟”更改为“完全成熟”
        4) 与步骤 1) 相反。
        5) 与第 2 步相反)。

        【讨论】:

          猜你喜欢
          • 2022-08-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多