Namen splitten

Status
Niet open voor verdere reacties.

mark1987vw

Gebruiker
Lid geworden
19 mei 2009
Berichten
96
Goedemiddag,

Ik wil voornaam, tussenvoegsel(s) en achternaam splitten vanuit een cel.

Dus de gehele naam staat in bijvoorbeeld A1.

Piet van de Broek

Dan wil ik uiteindelijk:

Piet in A1
van de in B1
Broek in C1

En dat met alle namen in kolom A.

Wanneer er geen tussenvoegsel is, dan moet a2 gewoon leeg blijven.


Ik heb al een opzet gemaakt, alleen hier pakt die alleen de eerste 2 woorden.
Wanneer ik hier een 3e regel aan toevoeg dan loopt die vast wanneer er geen tussenvoegsel is.

Ook heb ik geprobeerd om woorden te tellen en aan de hand daarvan te bepalen wat er moet gebeuren daar kwam ik niet helemaal uit.

Ik hoop dat iemand kan vertellen hoe ik dit het beste moet doen.
 

Bijlagen

  • Namensplitten.xlsm
    15,1 KB · Weergaven: 15
Zie ook bericht alphamax: https://www.helpmij.nl/forum/showth...uot-van-den-quot-quot?highlight=tussenvoegsel

Wil je het 100% in orde hebben, dan dien je alle varianten van tussenvoegsels in een macro of iets degelijks te vernoemen. En dat zijn er nogal een paar.

Wat dacht je van de variaties in meerdere voornamen enof achternamen, zoals:

Franciscus Janssen
Franciscus Johannes Janssen
Franciscus Johannes Janssen Groesbeek

Anna Cornelia Theodora Wilhelmina van Mulukom
Anna van Mulukom van der Weerden


Frans
 
In principe is het alleen:

1. Voornaam
2. Tussenvoegsel(s)
3. Achternaam

Dus woord één, altijd voornaam
Laatste woord achternaam
Daar tussen de tussenvoegsel(s).

Dus mijn vraag is of het mogelijk is om het eerste woord en het laatste woord in een cel eruit te halen en dan is het wat overblijft altijd de tussenvoegsels.

Ik weet alleen niet hoe ik dit voor elkaar krijg.

@alphamax

a. Dit is helaas niet mogelijk
b. Deze ga ik sowieso eens bekijken
 
Met formules.
Je moet wel zelf zorgen dat er geen dubbele spaties achter elkaar in je data staan.
 

Bijlagen

  • Namensplitten-2.xlsm
    13,7 KB · Weergaven: 24
Laatst bewerkt:
Voor office 365 kun je deze gebruiken

Code:
=LET(z;XML.FILTEREN("<x><y>"&SUBSTITUEREN(A1;" ";"</y><y>")&"</y></x>";"//y");c;AANTALARG(z);KIEZEN({1\2\3};INDEX(z;1);ALS.FOUT(TEKST.COMBINEREN(" ";;INDEX(z;REEKS(c-2;;2)));"");INDEX(z;c)))

Andere variant

Code:
=LET(z;"<x><y>"&SUBSTITUEREN(A1;" ";"</y><y>")&"</y></x>";ALS.FOUT(XML.FILTEREN(z;"//y"&{"[1]"\"[99]"\"[last()]"});ALS.FOUT(TEKST.COMBINEREN(" ";;XML.FILTEREN(z;"//y[position()>1 and position()<last()]"));"")))
 
Laatst bewerkt:
Maar kan dit ook in een macro gezet worden o.i.d..

Want ik wil deze kunnen gebruiken bij elk bestand zonder dat ik elke keer die code moet intypen.
 
Je kan deze formule toch kopieeren van de site en plakken in excel?
 
VBA is niet heilig
Als het met een formule kan heeft dat de voorkeur
Je kan toch alle namen zetten in kolom A en de formule in kolom B, net zo als je bestandje in bericht#1

Met een knop moet je eerst een cel selecteren op de knop klikken en dan aanwijzen waar het resultaat moet komen

Het is net alsof je elke dag een nieuwe naam krijgt die gesplitst moet worden
Misschien kan je dan beter vragen dat de gegevens al gesplitst aangeleverd worden

Maar misschien schat ik de situatie wel compleet verkeerd in
 
Laatst bewerkt:
Ja mijn vraag is maar een klein onderdeel van het gehele idee.

Het is een lijst met allemaal namen.
Daar achter staan allemaal gegevens die bij deze persoon horen maar dat is in deze vraag niet relevant

Uiteindelijk wil ik d.m.v. een vba deze gegevens allemaal laden in een Userform.
Maar daarin wil ik de namen achternaam en voornaam dus los hebben omdat ik dit dan makkelijker kan sorteren.

Daarom is mijn idee om deze te scheiden van elkaar maar dit wil ik dan wel in een macro, automatisch voor elkaar krijgen.
Ik download elke keer weer een nieuwe lijst en deze handeling moet uiteindelijk best vaak gebeuren, vandaar dat ik het automatisch wil hebben en niet handmatig.

Als dit lastig is dan probeer ik wel wat anders te verzinnen.
Uiteraard kan ik het bedrijf waarbij ik deze lijsten download vragen of ze het anders kunnen aanleveren maar ik ben bang dat dit niet gaat lukken.
 
Zet de formule in B1
Hieronder staat de code die een formule uit een cel omzet naar een string die je kan gebruiken in VBA.
Code:
Sub Main()
    sFormula = Blad1.Range("B1").Formula
    MsgBox sFormula
    Blad1.Range("c1").Formula = sFormula
End Sub
 
Laatst bewerkt:
Hier een code die hetzelfde doet als de formules in bericht#5
Code:
Public Sub NamenSplitsen()
    For lRow = 1 To Range("A1").CurrentRegion.Rows.Count
        sNaam = Application.Trim(Cells(lRow, 1).Value)
        aSpatie = Split(sNaam, " ")
        nSpatie = UBound(aSpatie)
        sTussenvoegsel = ""
        Cells(lRow, 2).Value = aSpatie(0)
        For iSpatie = 1 To nSpatie - 1
            sTussenvoegsel = sTussenvoegsel & aSpatie(iSpatie) & " "
        Next
        Cells(lRow, 3).Value = Trim(sTussenvoegsel)
        Cells(lRow, 4).Value = aSpatie(nSpatie)
    Next
End Sub
 
Ook een duit:
Code:
Sub hsv()
Dim sv, i As Long
sv = Cells(1).CurrentRegion
ReDim a(UBound(sv), 2)
 For i = 1 To UBound(sv)
   sv2 = Split(sv(i, 1))
    a(i - 1, 0) = sv2(0)
    a(i - 1, 1) = Trim(Replace(Replace(sv(i, 1), sv2(0), ""), sv2(UBound(sv2)), ""))
    a(i - 1, 2) = sv2(UBound(sv2))
  Next i
Range("b1").Resize(UBound(sv), 3) = a
End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan