How to Count the Number of a Specific Character in a Cell with Excel VBA

前端 未结 6 822
忘掉有多难
忘掉有多难 2021-01-14 22:26

I have a number of items in cells that are separated by dashes. I\'m trying to normalize the database by splitting rows so that each row contains only one entry. How do you

相关标签:
6条回答
  • 2021-01-14 22:39

    This will count the number of hyphens in the activecell

    Sub test()
        a = Len(ActiveCell)
        my_txt = Replace(ActiveCell, "-", "", 1, -1, vbTextCompare)
        b = Len(my_txt)
        numb_occur = a - b
    End Sub
    
    0 讨论(0)
  • 2021-01-14 22:42

    Using hint from ron's function above I've created this formula and it worked fine :

    =LEN(A1) - LEN(SUBSTITUTE(A1, "-", ""))
    
    0 讨论(0)
  • 2021-01-14 22:43

    Here's the UDF to count single string occurence in string:

    Option Explicit
    Function COUNTTEXT(ref_value As Range, ref_string As String) As Long
    
    Dim i As Integer, count As Integer
    
    count = 0
    If Len(ref_string) <> 1 Then COUNTTEXT = CVErr(xlErrValue): Exit Function
    For i = 1 To Len(ref_value.value)
        If Mid(ref_value, i, 1) = ref_string Then count = count + 1
    Next
    
    COUNTTEXT = count
    
    End Function
    

    Here's using Array formula:

    =SUM(IF(ISERROR(SEARCH("-",MID(A1,ROW(INDIRECT("$1:$" & LEN(A1))),1))),0,1))
    

    Entered using Ctrl+Shift+Enter.
    Hope this helps.

    0 讨论(0)
  • 2021-01-14 22:47

    Follow up to: davex, by davex.. :)

    I had been looking all over trying to find a way to test same for find text string in a formula. This answer seems to work correctly for both formulas / not & fits in a 1 liner.. (am still pretty novice at vba, let me know if any better way(s) ) thanks.

    If countChar(UCase(Selection.Formula), UCase("offset")) > 0 Then   'YES (thee? answer, works for both formulas / not)
    'If countChar(Selection.Formula, "OFFSET") > 0 Then   'yes
    'If countChar(Cells(ActiveCell.row, Selection.Column).Formula, "OFFSET") > 0 Then   'yes
    'If countChar(Cells(ActiveCell.row, "BG").Formula, "OFFSET") > 0 Then   'yes
    'If countChar(UCase(Selection), UCase("OffSET")) > 0 Then    'yes but not work on formula
    'If Selection.Formula Like "*offset*" Then   'no (for eq)
    MsgBox "YES" & Space(15), vbQuestion
    Else
    MsgBox "NO" & Space(15), vbQuestion
    End If
    

    NOTE: in place of variable "BG" above, i use permanent work cells to improve use for column BG example, work cell A3 has / shows: BG:BG

    =SUBSTITUTE(SUBSTITUTE(CELL("address",$BG3),"$",""),ROW(),"")&":"&SUBSTITUTE(SUBSTITUTE(CELL("address",$BG3),"$",""),ROW(),"")
    

    you will also need to dim the work cell, at the top / before the vba:

    Dim A3 As String
    A3 = RANGE("A3")
    

    pardon, tried 3 times to get all of code into 1 box. really suggest putting a code stop start icon in the toolbar.

    0 讨论(0)
  • 2021-01-14 22:48

    I found this answer:

    Sub xcountCHARtestb() 
         'If countCHAR(RANGE("aq528"), ".") > 0 Then    'YES
        If countCHAR(Selection, ".") > 0 Then 'YES
            MsgBox "YES" & Space(10), vbQuestion ', "title"
        Else 
            MsgBox "NO" & Space(10), vbQuestion ', "title"
        End If 
    End Sub 
    
    
    Sub xcountCHARtesta() 'YES
        MsgBox "There are " & countCHAR(Selection, "test") & " repetitions of the character string", vbQuestion 'YES
    End Sub 
    
    Function countCHAR(myString As String, myCHAR As String) As Integer 'as: If countCHAR(Selection, ".") > 1 Then  selection OR RANGE("aq528") '"any char string"
        countCHAR = UBound(split(myString, myCHAR)) 'YES
    End Function 
    
    0 讨论(0)
  • 2021-01-14 22:51

    This code might be of your help .. you can also use it as a UDF... :)

    Function CountHypens(rng_Src As Range) As Long
    
    'A VARIANT FOR SPLITTING CELL CONTENTS
    Dim var As Variant
    
    On Error Resume Next
    var = Split(rng_Src.Value, "-", , vbTextCompare)
    
    If Err.Number <> 0 Then
        Debug.Print "This cell does not have any hyphens."
    Else
        CountHypens = UBound(var)
        End If
    Err.Clear: On Error GoTo 0
    
    End Function
    
    0 讨论(0)
提交回复
热议问题