• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

String tellen in range (custom function VBA)

Status
Niet open voor verdere reacties.

Sanglan

Gebruiker
Lid geworden
28 okt 2018
Berichten
15
Hallo,

Ik wil graag tellen hoe vaak een specifieke string voorkomt in een range. Daarvoor gebruikte ik eerst een formule met LENGTE en SUBSTITUEREN, maar ik zou hem graag als custom function hebben omdat ik hem vaak gebruik en dat een stuk makkelijker werkt. Ik heb inmiddels gevonden dat deze werkt met een enkele cell:

Code:
Function CountOccurrences(countTxt, myTxt)
CountOccurrences = (Len(myTxt) - Len(Replace(myTxt, countTxt, ""))) / Len(countTxt)
End Function

Hoe kan ik deze aanpassen van het tellen binnen 1 enkele cel, naar een heel bereik?

Bedankt!
 
Maak een loopje door de cellen in MyTxt, (let op of het verschillende "area's zijn) en plak de tekst uit de cellen aan elkaar vast in een 'string'
 
Dank :) En ik had vast even aan moeten geven dat ik hier echt een totale beginner in ben... Ik was er al uit dat ik iets met een loopje moest doen, maar ik krijg het niet voor elkaar.
 
Mij lijkt dat zo'n funktie behoefte heeft aan:

- een Range
- een tekenreeks
- een schakeloptie voor hoofdlettergevoeligheid

Mij lijkt dat wij (helpers) behoefte hebben aan:

- een voorbeeldbestand
 
Voor het tellen hoe vaak een bepaalde tekst in een opgegeven bereik voor komt kan je WorksheetFunction.CountIf gebruiken.
Dan heb je geen loop nodig.
 
Die WorksheetFunction.CountIf werkt denk ik alleen voor het tellen van cellen waar een bepaalde string in voorkomt, maar het kan zijn dat de string een aantal keer in die cel voorkomt.

Verder: hoofdlettergevoeligheid is geen probleem, want het gaat hier om Chinese tekst en die kennen dat niet.

Ik kan wel even een voorbeeldbestand maken (de originele bevat mijn hele onderzoek), maar het komt erop neer dat die ene code hieronder dus het juiste resultaat gaf, maar ik dat nu op een range wil toepassen. Dus, loop door alle cellen in die range en tel de waarde op die uit die code komt. Ik kom zo met een voorbeeldbestand.
 
een en ander aan de bestaande funktie toegevoegd:

Code:
Function CountOccurrences(countTxt As String, ParamArray myTxt() As Variant)
Dim JmyTxt As String, ar As Variant, cl As Range
    For Each ar In myTxt
        For Each cl In ar
            JmyTxt = JmyTxt & cl.Value
        Next cl
    Next ar
CountOccurrences = (Len(JmyTxt) - Len(Replace(JmyTxt, countTxt, ""))) / Len(countTxt)
End Function
 
Mooi, maar als je nog een voorbeeldbestandje plaatst kan er wellicht nog een handigere/efficiëntere methode voor je worden bedacht
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan