【问题标题】:Excel 2013 - count occurrences of strings in cellExcel 2013 - 计算单元格中字符串的出现次数
【发布时间】:2016-02-29 16:47:40
【问题描述】:

我正在尝试创建一个单元格公式,该公式将为我提供一个单元格中一个或多个字符串的出现次数。

如果我的单元格 A1 包含 3.1.1-4 然后我希望我的公式返回 3(在单元格字符串中出现 . 或 - 的次数。

到目前为止,我有一个公式:

=COUNTIF(A1:A1,"*-*")+COUNTIF(A1:A1,"*.*")

但这只会返回 2(我猜是 1 因为“.”出现 + 1 因为“-”出现)

如何获得一个公式来计算任一字符串的出现次数而不是字符串的存在?

【问题讨论】:

  • Countif 计算单元格,而不是单元格内的数据片段。 VBA 使您可以轻松地做您想做的事。没有 VBA 就没有简单的方法,尽管一些涉及 Find 的数组公式可能会起作用。

标签: excel countif


【解决方案1】:

这是一个 VBA 解决方案。它需要两个字符串并计算第二个传递的字符串是第一个字符串的子字符串的次数。它在这样做时使用了朴素的线性搜索。默认情况下,它不区分大小写。将可选的IgnoreCase 参数设置为等于False 以进行区分大小写的搜索。

Function CountIn(ByVal s As String, ByVal t As String, Optional IgnoreCase As Boolean = True) As Long
    Dim i As Long, count As Long, n As Long, k As Long
    n = Len(s)
    k = Len(t)

    If IgnoreCase Then
        s = UCase(s)
        t = UCase(t)
    End If

    For i = 1 To n - k + 1
        If Mid(s, i, k) = t Then count = count + 1
    Next i

    CountIn = count
End Function

那么对于你的例子,

=COUNTIN(A1,"-")+COUNTIN(A1,".")

评估为 3

【讨论】:

  • 约翰,非常感谢。我开始认为它需要VB。该解决方案完美运行。
【解决方案2】:

使用这个公式:

=(LEN(E1)-LEN(SUBSTITUTE(E1,".","")))/LEN(".")+(LEN(E1)-LEN(SUBSTITUTE(E1,"-","")))/LEN("-")

【讨论】:

  • 请在您的答案中添加一些解释,以便其他人可以从中学习
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多