【问题标题】:How to search for specific string within a cell in excel?如何在excel中的单元格中搜索特定字符串?
【发布时间】:2014-05-10 15:26:17
【问题描述】:

我在一列中有一个 ID 列表。有时单元格有一个 id,有时一个单元格有多个 id:

[ "52b46bfc763f4ad9198b45ab", "533c0cba763f4a505e8b46db" ] - multiple id's
52c2ff91763f4a572d8b45e6 - single id

我使用COUNTIF 来计算给定ID 的所有实例。如果每个单元格中只有一个 id,它会起作用。但是,当一个单元格中有多个 id 时,它会失败。

如何计算给定实例在列中出现的次数?乐于使用 excel 函数或 VBA。

谢谢

【问题讨论】:

  • 在实际的电子表格中,多个 ID 是否有方括号?

标签: excel vba


【解决方案1】:

使用通配符:

=COUNTIF(A:A,"*52c2ff91763f4a572d8b45e6*")

例如:

【讨论】:

  • +1 为简单起见。次要观点:在测试时,我发现它没有发现多个 ID 相同的情况,例如52c2ff91763f4a572d8b45e6, 52c2ff91763f4a572d8b45e6?
  • @AlexP 我怀疑这会是个问题。如果需要考虑给定单元格中相同 ID 的多个实例,我会使用类似: =SUMPRODUCT((LEN(A1:A3)-LEN(SUBSTITUTE(A1:A3,"52c2ff91763f4a572d8b45e6","") ))/LEN("52c2ff91763f4a572d8b45e6"))
  • 我认为这是可行的:=COUNTIF(vendorOutput.csv!$F$2:$F$1782, "*"&O241&"*")。你会这样做吗?
【解决方案2】:

我喜欢Gary's Student 的轻松方式。

这里是一个使用用户定义函数的 VBA 解决方案供参考。示例:

    A                                                       B
1   52c2ff91763f4a572d8b45e6                                `=COUNTIDS(A1)` = 4
2   52c2ff91763f4a572d8b45e6, 52c2ff91763f4a572d8b45e6
3   52c2ff91763f4a572d8b45e6
4   52b46bfc763f4ad9198b45ab, 533c0cba763f4a505e8b46db

VBA 模块中的这段代码:

Function CountIDs(id As Range)
    Dim ids As Range, cl As Range, cnt As Long, arr As Variant, i As Integer

    Set ids = Range("A1:A" & Range("A1").End(xlDown).Row) //amend to suit your set-up
    cnt = 0

    For Each cl In ids
        If InStr(1, cl, ",", vbTextCompare) Then
            arr = Split(cl, ",")

            For i = 0 To UBound(arr)
                If VBA.Trim(arr(i)) = id Then
                    cnt = cnt + 1
                End If
            Next i

        Else
            If cl = id Then
                cnt = cnt + 1
            End If
        End If
    Next

    CountIDs = cnt
End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-18
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多