2017-08-04 30 views
4

我想發生次數的數量這句話「SMM:」列AJ每一行中第二列起,然後再將每一行與列BL從行開始分配值2我如何計算單元格中字符串的出現次數?

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 
+0

你能後的數據的屏幕截圖?它會幫助我做出答案! – Jsleshem

回答

2

對於完全匹配,您應該使用「vbBinaryCompare」。如果你想匹配「smm:」和「SMM:」,那麼你應該使用「vbTextCompare」。試試這個:

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 
+1

嗨@Tehscript,我編輯了你的帖子,從「SMM」改爲「SMM:」,我認爲你錯過了後排頂部的冒號。 – dwirony

+1

@dwirony是的謝謝。 – Tehscript

+0

@Tehscript,我試了一下代碼,但答案不在BL列中 – cookiemonster

2

該函數通過計算使用子字符串拆分字符串中元素的數量來獲得計數。

Function getStrOccurenceCount(Text As String, SubString As String) 
    getStrOccurenceCount = UBound(Split(Text, SubString)) 
End Function 

你可以修改代碼這樣

工作表( 「pptsr」)範圍( 「BL 2」 & F).value的= getStrOccurenceCount(cellCheck.Text, 「SMM」)。

以下是如何在陣列中使用getStrOccurenceCount以提高效率。

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秒:

enter image description here

+0

@Thomas Inzina,我也在Sub calculateamlp2()和End Sub之間試過你的代碼。但我得到一個錯誤,說「子或功能沒有定義」,然後突出顯示Sub calculateamlp2() – cookiemonster

+1

這聽起來像你沒有在computeamlp2代碼模塊或在公共代碼模塊中的getStrOccurenceCount函數 – 2017-08-05 00:08:00

相關問題