首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算单元格中字符串的出现数?

如何计算单元格中字符串的出现数?
EN

Stack Overflow用户
提问于 2017-08-04 21:17:51
回答 2查看 4.2K关注 0票数 5

我试图计算从第2行开始的AJ列中的每一行中"SMM:“这个短语的出现次数,然后将每一行的赋值分配给从第2行开始的BL列。

代码语言:javascript
复制
Sub calculateamlp()


Dim charactercount As Integer
Dim rangeAG As Range
Dim cellCheck As Range
Dim f As Integer
f = 2
 Worksheets("pptsr").Activate

Set rangeAG2 = Range("BL2", Range("BL2").End(xlDown))
Set rangeAG = Range("Aj2", Range("Aj2").End(xlDown))
For Each cellCheck In rangeAG

        charactercount = Len(cellCheck) - Len(WorksheetFunction.Substitute(cellCheck, ":", ""))


        Worksheets("pptsr").Range("BL2" & f).Value = charactercount

   f = f + 1
Next cellCheck

End Sub
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-04 21:36:11

为了精确匹配,您应该使用"vbBinaryCompare“。如果要将"smm:“与"SMM:”匹配,则应该使用"vbTextCompare“。试试这个:

代码语言:javascript
复制
Sub calculateamlp()
Dim count As Long, i As Long, j As Long, rw As Long
Dim ws As Worksheet
Set ws = Worksheets("pptsr")
With ws
    rw = .Range("AJ" & .Rows.count).End(xlUp).Row
    For i = 2 To rw
        For j = 1 To Len(.Cells(i, "AJ"))
            If InStr(j, .Cells(i, "AJ"), "SMM:", vbTextCompare) Then
                count = count + 1
                j = InStr(j, .Cells(i, "AJ"), "SMM:", vbTextCompare)
            End If
        Next j
        .Cells(i, "BL") = count
        count = 0
    Next
End With
End Sub
票数 3
EN

Stack Overflow用户

发布于 2017-08-04 21:42:45

此函数通过计算使用with子字符串拆分字符串中的元素数来获得计数。

代码语言:javascript
复制
Function getStrOccurenceCount(Text As String, SubString As String)
    getStrOccurenceCount = UBound(Split(Text, SubString))
End Function

您可以这样修改代码

工作表(“pptsr”).Range(“BL2”& f).Value = getStrOccurenceCount(cellCheck.Text,"SMM:")

下面是如何使用带有数组的getStrOccurenceCount来提高效率。

代码语言:javascript
复制
Sub calculateamlp2()
    Const SUBSTRING As String = "SMM:"
    Dim rangeAG As Range
    Dim data As Variant
    Dim x As Long

    Set rangeAG = Range("AJ2", Range("AJ2").End(xlDown))

    data = rangeAG.Value

    For x = 1 To UBound(data)
        data(x, 1) = getStrOccurenceCount(CStr(data(x, 1)), SUBSTRING)
    Next

    rangeAG.EntireRow.Columns("BL").Value = data
End Sub

演示:示例数据999,999行,执行时间0.9375秒:

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45515642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档