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

Tekstformule versimpelen

Status
Niet open voor verdere reacties.

luus1901

Gebruiker
Lid geworden
21 mei 2009
Berichten
66
In een excelbestand komen teksten voor waarin meestal 2 komma´s worden gebruikt, maar 3 kan ook.
Nu moet ik uit de tekst het een na laatste stuk tekst halen. Dit staat tussen komma´s maar hoeft niet perse uit 1 woord te bestaan.
Voorbeeld : in A14 en A15
Proef aardbei, lk. Twee, 15
Test woord probleem x78, zy, abvd, 75/12

Na lang proberen heb ik een formule die inderdaad doet wat ik zoek. Maar het is zo ingewikkeld dat ik mij afvraag of dit niet makkelijker kan.
Wie helpt?

De formule: =ALS(LENGTE($A14)-LENGTE(SUBSTITUEREN($A14;",";""))=2;DEEL($A14;VIND.SPEC(", ";$A14)+2;VIND.SPEC(",";$A14;VIND.SPEC(",";$A14)+1)-VIND.SPEC(", ";$A14)-(LENGTE($A14)-LENGTE(SUBSTITUEREN($A14;",";""))));DEEL($A14;VIND.SPEC(",";A14;VIND.SPEC(",";A14;VIND.SPEC(",";A14)+1)+1)-(VIND.SPEC(",";A14;VIND.SPEC(",";A14;VIND.SPEC(",";A14)+1)+1)-VIND.SPEC(",";A14;VIND.SPEC(",";A14)+1)-2);VIND.SPEC(",";A14;VIND.SPEC(",";A14;VIND.SPEC(",";A14)+1)+1)-VIND.SPEC(",";A14;VIND.SPEC(",";A14)+1)-2))

Luus
 
bij mij werkt je formule niet,
plaats eens een voorbeeld met jouw werkende formule er in
 
Dan maar hopen dat er eentje reageert :)


In ieder geval bedankt Sylvester-Ponten:thumb:
 
de vorige is fout
deze is beter (groene cellen)

ps vorige is verwijderd
 

Bijlagen

  • een na laatste met vba (4.xlsm
    15,8 KB · Weergaven: 33
Laatst bewerkt:
zo geeft hij een lege cel als er geen komma's in voorkomen:
{=als(lengte($a1)-lengte(substitueren($a1;",";""))>0;deel(a1;grootste((--(deel(a1;rij($a$1:$a$9999);1)=",")*rij($a$1:$a$9999));2)+1;grootste((--(deel(a1;rij($a$1:$a$9999);1)=",")*rij($a$1:$a$9999));1)-grootste((--(deel(a1;rij($a$1:$a$9999);1)=",")*rij($a$1:$a$9999));2)-1);"")}
dit is toch een onoverzichtelijk gedrocht,
vba ziet er veel beter uit:
Code:
Function eenNaLaatste(T As String)
    eenNaLaatste = ""
    temp = Split(T, ",")
    If UBound(temp) > 0 Then eenNaLaatste = temp(UBound(temp) - 1)
End Function
 
Laatst bewerkt:
De crack bleek je dus zelf te zijn :D

Ik begrijp de formule alleen niet, wil je uitleggen wat het doet? (ook al is het volgens jou een gedrocht, er staan wel dingen in die ik niet ken. En dat vind ik juist interessant).
De VBA-oplossing is prachtig, maar dat kan ik niet gebruiken als er een Excel bestand zonder macro’s noodzakelijk is.
 
Ervan uitgaande dat (zoals je schrijft) de teksten in kolom A ofwel 2 ofwel 3 komma's bevatten en de teksten niet langer zijn dan 100 tekens, typ in B1 en kopieer naar beneden:
Code:
=spaties.wissen(deel(substitueren($A1;",";herhaling(" ";100));100*(lengte(A1)-lengte(substitueren(A1;",";"")))-99;100))
 
Laatst bewerkt:
Wauw!

Tekst is inderdaad nooit meer dan 100 tekens, dus ik ben geholpen!
Heb weer een hoop geleerd!

Dank je zapatr :thumb:

Zet de vraag als opgelost.
Mocht Sylvester nog wat toelichting willen geven, dan graag want het stukje met -- in de formule ken ik niet.
 
Zapatr, petje af :thumb:
wat geniaal gevonden. en zo eenvoudig. geweldig.

een opmerking: als er meerdere spaties in een oplossing aan elkaar zitten
Code:
( "aap,Test     Test,noot")
dan wordt de oplossing
Code:
"Test Test"
en niet
Code:
"Test     Test"

Luus, -- zet WAAR en ONWAAR om in getallen
 
Laatst bewerkt:
Sylvester,
in enkele eerdere topics was ik (en was ook snb) al bezig geweest met procedures waarbij min of meer dezelfde functies gebruikt werden als in mijn antwoord in dit topic. Ik vind jouw oplossing fraaier hoor, veel korter, en dus veel praktischer. Ik zou daarom aan jouw oplossing de voorkeur geven.
Code:
als er meerdere spaties in een oplossing aan elkaar zitten
( "aap,Test     Test,noot")
dan wordt de oplossing
"Test Test"
en niet
"Test     Test"
Dat is juist en dat zou je bv. als volgt kunnen oplossen:
Code:
=substitueren(deel(substitueren(A1;",";herhaling("@";100));100*(lengte(A1)-lengte(substitueren(A1;",";"")))-99;100);"@";"")
Er kunnen dan uiteraard ook voorloopspaties blijven staan (als die er zijn).
In vergelijking met jouw macro blijft dit natuurlijk behelpen, dus nogmaals: jouw oplossing verdient de voorkeur.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan