Voorvoegsels bij achternamen verwijderen

Status
Niet open voor verdere reacties.

allard1

Gebruiker
Lid geworden
5 dec 2006
Berichten
314
Beste allemaal,

Ik weet het, ik stel veel vragen maar ik heb geleerd dit te doen nadat ik alles voor mijn gevoel heb uitgeput. Wat is het geval.
Ik heb een lijst met achternamen. Bij sommige achternamen staan voorvoegsels:
- De Vries
- Van Vliet
- Den Ouden
-Etc.
Ik heb geprobeerd middels de replacefunctie, left functies, Instr functie etc om deze voorvoegsels te verwijderen om tot de volgende namen te komen
-Vries
-Vliet
-Ouden
-etc.
Met replace functie kreeg ik bij de naam Deden alleen de "N" terug. Ik heb natuurlijk gevraagd om naar "de" te zoeken :)

Wie weet, wie weet, wie weet.

Groet,
Allard
 
Fantastische site die Datapigtechnologies.....echt wat voor een regenachtige zondagmiddag....of een zonnige dag op kantoor :)
Ik heb de oplossing inmiddels gevonden en zoals gewoonlijk ga ik deze ook weer delen. Wat wil het geval. Wanneer je kijkt naar de naam: De Vries, dan is er iets dat opvalt. Er staat namelijk een spatie tussen De en Vries. Mijn replacefunctie deed exact wat hij moest doen alleen zei ik niet: Zoek op "De" en spatie, maar zoek op "De". Dan krijg je fenomenale resultaten als mensen die alleen een N als achternaam hebben. Wat wordt het dus wel:
Code:
Replace([Achternaam];"De ";""
Heb je dan alles? Waarschijnlijk niet omdat mensen altijd tikfouten maken met spaties ervoor of dubbele spaties erna. Maar je komt wel een aardig end verder.
Misschien heeft iemand er nog iets aan.

Groet,
Allard
 
Vraagje:
Wat doe je met iemand die een dubbele achternaam heeft? Vooral bij adelijke families te vinden.

Voorbeelden:
Seijen ten Hoorn
Van Voorst tot Voorst
De Leeuw van Weenen
van Nispen tot Sevenaer
 
Vraagje:
Wat doe je met iemand die een dubbele achternaam heeft? Vooral bij adelijke families te vinden.

Voorbeelden:
Seijen ten Hoorn
Van Voorst tot Voorst
De Leeuw van Weenen
van Nispen tot Sevenaer

Daar heb je een enorm goed punt welke ik ook al had onderkend. En om heel eerlijk te zijn, die hebben gewoon pech....in eerste instantie. Dit is niet een heel erg diplomatiek antwoord, maar zo is het wel. Overigens, staan deze vormen van adelijke titels er niet in. En daarnaast, ik heb alleen de voorvoegsels, den, ten, van der, van den, van der, de etc. genomen en het voorvoegsel tot maar weggelaten. Maar nogmaals, goed punt
 
In eerder stadium had ik al aangeven dat de replace functie op zich werkt. Maar wanneer ik meerdere replace functies achter elkaar plaats, draait de query de soep in met de mededeling "Jammer, alles is weg" :) Is hiervoor ook een VBA functie te bedenken. Mijn huidige draak van een query ziet er zo uit:
Code:
Replace(Replace(Replace(Replace(Replace([Geslachtsnaam];"de ";"");[Geslachtsnaam];"van ";"");[Geslachtsnaam];"der ";"");[Geslachtsnaam];"ter ";"");[Geslachtsnaam];"den ";"")

Groet,
Allard
 
Maar waarom zelf bouwen als er conversietooltjes zijn gemaakt? ;)
Deze heb ik (niet op een regenachtige middag) zelf in elkaar gezet...
Het gaat dan om het formulier frmConverteren. Kijk maar eens of je er wat aan hebt...
 

Bijlagen

@Octafish,

Allereerst mijn complimenten voor dit fantastische stukje code!!!! Het ziet er zo gelikt uit, dat ik besloten heb met Access te stoppen :,(....Dit gaat echt gigantisch boven mijn pet...Maar ik maak er toch gebruik van. Altijd leuk voor de toekomst en voor mijn huidige project. Het werkt fantastisch!!!.
BEDANKT!
 
Stoppen??? Juist doorgaan! Dit kon ik twee jaar geleden ook niet ;)
 
Stoppen??? Juist doorgaan! Dit kon ik twee jaar geleden ook niet ;)

Stoppen zal ik nooit :) dat was slechts een grap. De functie is nog steeds fantastisch maar de voorvoegsels worden nog niet verwijdert, dus daaraan ben ik even aan het sleutelen. Ik moet wel zeggen alles loopt door elkaar. Ik ben nu bezig met een cursus VB maar alle office applicaties hebben zo weer hun eigen VB....ach het houdt de mens scherp :)
 
Het lukt toch niet,

Met de functies van Octafish kwam ik een heel end (overigens is dit sowieso een mooi stuk programmeer werk om te lezen), maar het lukt nog steeds niet. Probleem blijft hetzelfde en het is gedeeltelijk op te lossen middels een replace functie zoals eerder genoemd.
Ik ben inmiddels anderhalve dag bezig (hoezo niet willen weten waarom), maar het lukt me toch niet. Onderstaand een opsomming van de oplossing in woorden:
1. Zoek in de achternaam naar voorvoegsel "De"
2 Verwijder deze
3 Vervang deze door niets (geen spaties e.d.)
en hup naar het volgende record.
Voor "De" werkt de replacefunctie prachtig en voor alle voorvoegsels die bestaan uit 1 woord. Wanneer het er twee worden, stopt ie al. En het nadeel is. Ik kan de replace niet kwijt in Acces VBA.......wie heeft er een idee
Groet,
Allard
 
Je kunt Replace prima gebruiken in VBA. Daarbij heb je wel een variabele of een tabel/veldverwijzing nodig. Welke code gebruik je?
 
Je kunt Replace prima gebruiken in VBA. Daarbij heb je wel een variabele of een tabel/veldverwijzing nodig. Welke code gebruik je?

Daar komt ie :S
Code:
Function Voorvoegsel(Naam as string)
Replace (Naam, "de ","")
End function

En als je dan bijgekomen bent van het lachen :o Dan ben ik benieuwd naar je idee :)
 
Ik kom er toch weer op terug op dit vraagstuk. Het probleem heb ik nog steeds niet kunnen oplossen :( En het begint zo langzamerhand een soort levensreis te worden :). Ik moet dit gewoon kunnen oplossen :P Wanneer ik in VBA de eerder genoemde code gebruik met replace....fantastisch. Maar nu wil ik of in meerdere replace in een functie gebruiken of een replacefunctie die dan vervolgens de volgende aanroept bijvoorbeeld.
Code:
Function Voorvoegsel(Naam as string)
Replace (Naam, "de ","")
Call Van
End function
Het blijft een mooie uitdaging.
 
Hallo allemaal,
Ik begin vervelend te worden, maar ik heb een deel van de oplossing zie hieronder
Functie 1 is het bepalen van de zoektabel met enkelen voorvoegsels met als opmaak:
De en een spatie daarin
Code:
Function rstVoorvoegselTabel() As Recordset
    If (rstGeopend = False) Then
        Set db = CurrentDb
        Set rst = db.OpenRecordset("enkele_Voorvoegsels")
        rstGeopend = True
        Set rstVoorvoegselTabel = rst
    Else
        Set rstVoorvoegselTabel = rst
        rst.MoveFirst
    End If
End Function

Vervolgens gebruik ik de volgende functie voor het uit de naam halen van de voorvoegsel
Code:
Function voorvoegsels(naam)
    Dim pos As Integer
    voorvoegsels = "" 'default: geen voorvoegsels gevonden in de naam
            
    Set rst = rstVoorvoegselTabel()
    While Not rst.EOF() 'doorloop de voorvoegsels tabel
        pos = InStr(1, Trim(naam), Trim(rst!Voorvoegsel)) 'voorvoegsel in de naam aanwezig?
        If (pos = 1) Then 'voorvoegsel gevonden op eerste positie van de naam
            voorvoegsels = Trim(rst!Voorvoegsel)
        End If
        rst.MoveNext
    Wend
    
End Function

Maar nu komt het. wanneer er "De Vries" staat krijg ik keurig Vries terug. Wanneer er Dekker staat krijg ik kker terug. Dit bevreemd mij enigzins aangezien ik in de tabel al heb aangegeven dat elk voorvoegsel een spatie in zich heeft.

Wat nu.
 
En toch is het logisch...
pos = InStr(1, Trim(naam), Trim(rst!Voorvoegsel))
Je zoekt namelijk alleen op (nota bene ook nog van eventuele spaties gestripte) Voorvoegsels... De grap van een voorvoegsel is natuurlijk dat het gevolgd wordt door een spatie.
Ergo:
pos = InStr(1, Trim(naam), Trim(rst!Voorvoegsel) & " ")
moet het al beter doen.
 
En toch is het logisch...
pos = InStr(1, Trim(naam), Trim(rst!Voorvoegsel))
Je zoekt namelijk alleen op (nota bene ook nog van eventuele spaties gestripte) Voorvoegsels... De grap van een voorvoegsel is natuurlijk dat het gevolgd wordt door een spatie.
Ergo:
pos = InStr(1, Trim(naam), Trim(rst!Voorvoegsel) & " ")
moet het al beter doen.

Ja je hebt volkomen gelijk, ook die optie had ik al geprobeerd, maar het levert net zo weinig op. Het leuke is dan wel weer om te zien dat ik het dus begin te begrijpen. Om toch tot een oplossing te komen heb ik een maar ietwat abruptere (als dat een woord is) functie geschreven
Code:
Function vv(naam)
Dim pos As Integer
Dim lengte As Integer

If InStr(naam, " ") = 0 Then
vv = naam
Else
vv = Right(naam, Len(naam) - InStrRev(naam, " "))

End If
End Function
Okee ik haal meer weg dan ik wil, maar dat is op zich niet zo heel erg. Wat mooier is, dat ik deze zelf heb bedacht :P
Ik zet er denk ik een slotje op
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan