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

Namen, tussenvoegsels, initialen en titels splitsen

Status
Niet open voor verdere reacties.

Erik Smit

Gebruiker
Lid geworden
10 mrt 2008
Berichten
11
Beste iedereen,

Naar aanleiding van de vraag van ChristiaanEvers op 06-10-2006, ja is lang geleden ik weet het, heb ik de volgende vraag.

De macro die wordt aangeleverd werkt idd goed, alleen bij mij staan er ook nog titels en een aanhef voor. Dus dan wordt het niet goed gescheiden.

De namen zijn als volgt opgebouwd:
Aanhef: De heer of Mevrouw of Dhr./Mevr.
Titel: Altijd kleine letters, afgesloten met een punt. Soms meerdere titels, gescheiden door een spatie.
Voorletters:Hoofdletters, soms kleine h. gescheiden door een punt.
Tussenvoegsels: Altijd kleine letters
Naam: Beginletters, soms meerdere namen.

En er staan soms ook afdelingen tussen, maar dat zoek ik dan achteraf nog wel handmatig uit.

Weet iemand misschien hoe dit VB Script aangepast moet worden?

Code:
Sub NaamSplitsen()
Dim X As Integer, Y As Integer, RijTeller As Long, Spatie(10) As Integer, c As Range
Dim Voorvoegsel As String, Achternaam As String, Naam As String, Voornaam As String

Voorvoeg = MsgBox("Wilt u de voorvoegsels in een aparte kolom?", vbYesNo)
If Voorvoeg = vbNo Then
StopZoek = MsgBox("Wilt u de voorvoegsels (van der, v/d) naar de kolom van de achternamen meekopiëren?", vbYesNo)
End If

For Each c In Range("A1", Range("A1").Range("A" & Rows.Count).End(xlUp))

Naam = Replace(Trim(c.Value), " ", " ")
Y = 0
Spatie(1) = 0
For X = 1 To Len(Naam) ' Zoeken naar eerste spatie
If Mid(Naam, X, 1) = " " Then
Y = Y + 1
Spatie(Y) = X
If StopZoek = vbYes Then Exit For ' Voorvoegsels bij Achternaam.
End If
Next

If Spatie(1) <> 0 Then ' Spatie gevonden
If Voorvoeg = vbNo Then
If StopZoek = vbYes Then Y = 1
Voornaam = Mid(Naam, 1, Spatie(Y) - 1)
c = Voornaam
Achternaam = Mid(Naam, Spatie(Y) + 1)
c.Offset(, 1) = Achternaam
Else ' Voorvoegsels apart naar kolom C
Voornaam = Mid(Naam, 1, Spatie(1) - 1)
c = Voornaam
Achternaam = Mid(Naam, Spatie(Y) + 1)
c.Offset(, 1) = Achternaam
If Y > 1 Then
Voorvoegsel = Mid(Naam, Spatie(1), Spatie(Y) - Spatie(1) + 1)
c.Offset(, 2) = Trim(Voorvoegsel)
End If
End If
Else ' Naam naar kolom B
c = Naam
End If
Next
End Sub
m.d.a. Wigi


Met vriendelijke groeten

Erik Smit
 
Erik,

zet hier ook effe een voorbeeldje zodat we exact kunnen zien waar het omgaat

Ron
 
Bij deze heb ik even een voorbeeldje samengesteld.

Het is dus de bedoeling dat alles gescheiden wordt:
Kolom 1 ---------> Geslacht
Kolom 2 ---------> Titels
Kolom 3 ---------> Voorletters
Kolom 4 ---------> Tussenvoegsels
Kolom 5 --------> Achternaam

Hopelijk kan dit.

Met vriendelijke Groeten

Erik Smit
 

Bijlagen

Dit is een Excel2007 bestand en dat kunnen een hoop helpers niet lezen. Graag een excel 2003 bestand!

Ron
 
Ron,

Heb je die converter niet opgehaald? ;)
 

Bijlagen

Dat was omdat ik op de een of andere manier alleen .xlsx bestanden in kon voegen.

Hierbij het bestand ingepakt.

Groetjes

Erik
 

Bijlagen

Heb je die converter niet opgehaald
Rob, ik moet nog steeds eens 2007 installeren, lijkt me een betere oplossing.

Dat voorbeeld laat zien dat het aardig onmogelijk gaat worden

Er is: De heer / mevrouw Dat wordt lastig omdat bij de een spatie staat en bij de ander niet. Sommigen hebben 1 titel (mr) sommigen 2 (prof. ir.) en sommigen geen. Er zijn mensen met voorletters en zonder voorletters. Er zijn dubbele achternamen.

Met 7 regels zijn er ongelooflijk veel variaties en ik moet dan afhaken. Wellicht is er een briljante ingeving bij iemand anders?

Ron
 
Ja dat klopt, er zijn ook ontzettend veel variaties, en daarom vraag ik me ook af of het uberhaupt mogelijk is. Maar mijn baas weet zeker dat het kan, omdat ie het al ergens gezien heeft.

Maar hoe kom je eigenlijk aan zeven regels, ik kom maar op 5?

Groetjes

Erik
 
Ja dat klopt, er zijn ook ontzettend veel variaties, en daarom vraag ik me ook af of het uberhaupt mogelijk is. Maar mijn baas weet zeker dat het kan, omdat ie het al ergens gezien heeft.

Maar hoe kom je eigenlijk aan zeven regels, ik kom maar op 5?

Groetjes

Erik

Over het algemeen is er geen pasklare oplossing voor dit soort problemen.

Al kan het evt. wel mogelijk zijn als alles mooi binnen de plooien valt, dus geen uitzonderingen, weinig dingen met variabele lengte, enz.
 
Hoe bedoel je binnen de plooien?

Heb namelijk een VB Script, dat jij aangepast had, gepakt, en dat werkte heel goed, alleen niet voor het geslacht en de titel,
Vandaar deze vraag ook....

Groetjes

Erik
 
Laatst bewerkt:
Ik bedoel bvb het zoeken op titel in een macro. Je kan door alle letters in de cel 1 voor 1 gaan vanaf de aanhef en dit blijven doen zolang je geen hoofdletter tegenkomt.

Bij Mevrouw prof. ir. C.D.A. in 't Veld zal dat lukken.

Bij Mevrouw de Wit zit je al in de problemen. De "de" zal aanzien worden als de titel.

En zo zullen er nog wel andere dingen zijn.

Wigi
 
Ik denk dat je daar wel gelijk in hebt.

Het is gewoon heel erg moeilijk, en ik heb zelf geen verstand van VB anders zou ik zelf wel wat geprobeerd hebben. De naam en de aanhef is opzich niet zo moeilijk, daar heb ik al een als formule en een rechts formule op los gelaten, en dat werkt wel.

Alleen de rest heb ik geen flauw benul van hoe ik dat op moet gaan lossen.

Want als ik dat VB Script dat ik helemaal bovenin neer heb gezet los laat op het voorbeeldbestand dat bij dat script zat dan werkt het wel.
alleen pakt hij dan de titel en de aanhef niet.

Volgens mij heb je wel gelijk en is er niet echt een pasklare oplossing voor.

In ieder geval bedankt.

Groetjes

Erik
 
Volgens mij heb je wel gelijk en is er niet echt een pasklare oplossing voor.

Dat is inderdaad de conclusie.

Je zal altijd x aantal gevallen hebben waar het fout loopt. De kans dat x nul is, is redelijk klein ;)

Wigi
 
Maar dan heb ik wel de volgende vraag,

Aangezien ik echt noppes verstand heb van VB :o:confused:

Kan iemand dan het wel schrijven in VB dat excel het in elk geval probeerd.....

Want ik vroeg me dan nl. af of je excel dan niet kan laten vragen als je de macro laat draaien, of er in het bestand titels, een aanhef etc zitten.

Dat maakt het dan wel een stuk makkelijker, want als ik er dan een bestand doorheen gooi dat alleen maar voorletters, tussenvoegsel en achternaam bevat, hoef excel natuurlijk niet te gaan zoeken naar een aanhef en een titel.

Is dat mogelijk??

Groetjes en b.v.d.

Erik
 
Kijk dan in de code die je al hebt. Daar staan reeds MsgBoxes om aan de gebruiker wat te vragen.
 
Sorry, maar ik snap echt geen hout van VB, Zie wel wat er staat, heb wel een paar msgboxes toegevoegd, maar die doen nu nog niets.....

Tenminste als ik ja aanklik gebeurt er niets, omdat ik er nog niets aan toegewezen heb.

Ik probeer wel wat verder te knutselen, maar echt snappen doe ik het niet:S

Groetjes

Erik
 
Zo geweldig moeilijk is dat niet hoor ;)

Je hebt bvb.

Code:
StopZoek = MsgBox("Wilt u de voorvoegsels (van der, v/d) naar de kolom van de achternamen meekopiëren?", vbYesNo)

De variabele StopZoek bevat nadat de gebruiker op 1 van de 2 knoppen geklikt heeft, het antwoord van de gebruiker. Dus Ja klikken en de variabele bevat vbYes, Neen klikken en de variabele bevat vbNo.

Wat verderop in de code staat er dan een test:

Code:
If StopZoek = vbYes Then Exit For

Wigi
 
Ok, ik snap het,

En nu heb ik dus dit getikt:

Code:
Aanhef = MsgBox("Bevat het bestand een Aanhef", vbYesNo)
If Aanhef = vbNo Then Titel = MsgBox("Bevat het bestand Titels?", vbYesNo)
If Titel = vbNo Then Voorvoeg = MsgBox("Wilt u de voorvoegsels in een aparte kolom?", vbYesNo)
If Voorvoeg = vbNo Then
StopZoek = MsgBox("Wilt u de voorvoegsels (van der, v/d) naar de kolom van de achternamen meekopiëren?", vbYesNo)
End If

En nu geeft ie idd berichtjes.

De Aanhef is het moeilijkste vanwege de spatie bij De heer, dus dat moet ik dan van te voren even omzetten naar Dhr. en Mevrouw naar Mevr. dit lost dat probleem wel op denk ik. Kan ik dan VB laten zoeken naar Dhr., Mevr., en Dhr./Mevr.? Zo ja hoe doe ik dat?

En dan zou ik hem voor de variabele titel willen laten zoeken op "kleine letters. " en dat zou dan de titel moeten worden. Nu denk ik dus dat ik dan van dat "kleine letters en de punt en de spatie " een Integer moet maken. Klopt dit? En zo ja hoe doe ik dat?

Voor de rest lukt het me wel denk ik.:) en als het werkt, dan upload ik de oplossing wel, voor als nog meer mensen met dit probleem komen;)

Groetjes en b.v.d.

Erik
 
Laatst bewerkt:
Ok het lukt me dus niet:shocked::confused::(

Begrijp er echt geen hout van, is er echt niemand die me kan helpen?

Groetjes

Erik
 
Erik Smit, Drie vragen.....
  1. Wat is de basis van dit bestand? Ofwel, is het afkomstig uit een database en heb je dan niet een mogelijkheid om je data 'netter' te importeren in Excel?
  2. Moet je vaak zo'n lijst 'splitsen'? (subvraag: zie volgende...)
  3. Om hoeveel records gaat het? Ofwel, als het er niet te veel zijn, zou ik het handmatig gaan doen. Ik zie dat je al 2 dagen met dit vraagstuk bezig bent. Daarin had je al behoorlijk wat records handmatig in kolommen kunnen zetten.

Groet, Leo
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan