• 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.

Bestaande functie kunnen toepassen op een selectie, (plat slaan van diakrieten)

Status
Niet open voor verdere reacties.

FerryW

Gebruiker
Lid geworden
12 aug 2013
Berichten
41
Ik heb een Excel functie gevonden die werkt op een enkele cel.
Deze functie controleert de betreffende cel of er diakrieten (speciale tekens) in de string staan, en vervangt deze voor het equivalent.
Dit werkt.
Zie VBA code hieronder.

Function StripAccent(thestring As String)
Dim A As String * 1
Dim B As String * 1
Dim i As Integer
Const AccChars = "ŠŽšžŸÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðñòóôõöùúûüýÿ"
Const RegChars = "SZszYAAAAAACEEEEIIIIDNOOOOOUUUUYaaaaaaceeeeiiiidnooooouuuuyy"
For i = 1 To Len(AccChars)
A = Mid(AccChars, i, 1)
B = Mid(RegChars, i, 1)
thestring = Replace(thestring, A, B)
Next
StripAccent = thestring
End Function

Ik wil deze functie, of eigenlijk het resultaat uit deze actie, kunnen toepassen op een reeds bestaande kolom (of selectie) van cellen.
Vraag: Op welke manier kan ik bovenstaande code (deels) hergebruiken om eventueel reeds ingevoerde cellen (een selectie) achteraf alsnog te laten corrigeren. Het aantal gevulde cellen in de te controleren kolom is vooraf onbekend.

Groet Ferry
 
Als je zelf eerst de reeks cellen selecteert kan het vrij eenvoudig met een loop die dan de functie aanroept voor een uitkomst

Code:
Sub AccentVerwijderen()
For Each cl In Selection
    cl.Value = StripAccent(cl.Value)
Next
End Sub
 
Dag Roel,

Heel fijn en bedankt.
Voor diegene die hier ook behoefte aan hebben heb ik jouw oplossing nog even aangevuld met het wijzigen van de achtergrondkleur van alle in de selectie gewijzigde cellen met oranje achtergrond

Sub AccentVerwijderen()
For Each cl In Selection
tempCLwaarde = cl.Value
cl.Value = StripAccent(cl.Value)
nieuwCLwaarde = cl.Value
If nieuwCLwaarde <> tempCLwaarde Then cl.Interior.Color = 49407
Next
End Sub

Heel fijn opgelost. En zo lekker snel.
Top

Ferry
Lelystad
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan