VBA Script Pattern zoeken van ' als tekst

Status
Niet open voor verdere reacties.

Sp0ns

Gebruiker
Lid geworden
24 aug 2016
Berichten
19
Besten,

Onderstaande code werd opgesteld om het voorkomen van enkel de letter C te tellen in een range maar blijkt ook C' weer te geven. Heb al allerlei aanpassingen geprobeerd maar vind geen oplossing.

Code:
Sub CountC()
    Dim n, i As Long, cnt As Long, x
    Dim myMatches As Variant
    With CreateObject("vbscript.regexp")
        .MultiLine = True
        .Global = True
        .IgnoreCase = False
        .Pattern = "\b(C)\b"
        x = Sheets("Code").Range("N6:N45")
        For i = 1 To UBound(x)
            Set myMatches = .Execute(x(i, 1))
                cnt = cnt + myMatches.Count
        Next i
        Sheets("Counts").[L6].Value = cnt
    End With
End Sub
 
wat levert

PHP:
countif(N6:N45;"C")
op ?
 
Had ik ook eerst geprobeerd maar dan telt hij alleen maar de C als deze als enige waarde in een cel staat.

"Mp, C" kan ook bv. een waarde zijn, daarom dat ik via .Pattern wou proberen. Ik denk dat het probleem is dat ' een "speciaal teken" is, heb dit ook proberen te vermijden door ^ te gebruiken voor ' maar zonder succes.
 
formuleren van het criterium lijkt me cruciaal, de methode is secundair.

De formulering
van enkel de letter C te tellen in een range maar blijkt ook C' , "Mp, C" kan ook bv. een waarde zijn

Lijkt me dan problematisch.
 
Het probleem blijkt volledig terug te voeren op C' (gebruik van apostrof in string) ?
Daarom dat waarschijnlijk C' ook als gewoon C geteld wordt.
Is het mogelijk om dit te omzeilen; kan ik C' effectief als C' laten lezen ?
 
En zo?
Code:
 .Pattern = "(C$|['])"
 
Deze vermelding meet elk gebruik van C in de cellen; telt in dit geval

C'
FC
FC
FC
mp,C

Ik denk dat ik een algemene work-around moet zoeken voor de C' vanuit de input; ik merk dat het gebruik van de apostrof hierin meerdere codes en counts ontregelt. Ik kan natuurlijk C' vervangen door bv. Cc maar dat maakt de input voor de gebruiker onlogisch.

Ik ben onderstaande tegengekomen als global variable maar begrijp er te weinig van om te durven gebruiken in mijn documenten:

Code:
 Public Const vbDoubleQuote As String = """" 
'represents 1 double quote (") 
Public Const vbSingleQuote As String = "'" 
'represents 1 single quote (') 
'and using it like so: 
Shell "explorer.exe " & vbDoubleQuote & sPath & vbDoubleQuote, vbNormalFocus
 
Specificeer eens wat duidelijker met welke variatie aan gegevens je te maken hebt.
Beschrijf eens wat precieser wat het gewenste resultaat moet zijn.
 
Zie bijlage voor het bestand.

In Range("N6:N45") van Sheets."Code" kunnen volgende waarden terechtkomen:

Ma, Mp, Ma-p, FMa, FMp, FMa-p, ma, mp, ma-p, FC, CF, C, C', Y, T, V, FD, r, F

In Range("L6") van Sheets."Counts" moet de optelsom komen van hoe vaak exact en alleen de letter C (dus niet CF, FC of C') voorkomt in de range van ("N6:N45") van Sheets."Code".

Dit is me gelukt voor bijna alle waarden via het .pattern-systeem maar nu bots ik op problemen omwille van de apostrof bij C'.
Bekijk bijlage Rorschach (Scoring).xlsm
 
Vervang 'omwille' door 'vanwege'.

zie de bijlage:
 

Bijlagen

Laatst bewerkt:
Zou inderdaad ook een oplossing kunnen zijn. Probleem is dat ik eens bekeken heb met een aantal collega's die het programma zouden gebruiken en ze kunnen er niet aan uit. Ik ben ook geen Excel-wizard dat ik het voor hun allemaal mooi en overzichtelijk kan maken :(

Heb de code ondertussen wel kunnen aanpassen zodat hij doet wat er verwacht wordt:

Code:
Sub CountC()
   Dim n, i As Long, cnt As Long, x
   With CreateObject("vbscript.regexp")
    .MultiLine = True
    .Global = True
    .IgnoreCase = False
    .Pattern = "\bC[^-'\w]"
    x = Sheets("Code").Range("N6:N45")
    For i = 1 To UBound(x)
        cnt = cnt + .Execute(x(i, 1) & " ").Count
    Next i
End With
Sheets("Counts").[L6].Value = cnt
End Sub
 
lijkt me onzin als de eenvoudigste Excel-formule het goede resultaat geeft.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan