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

Tekst tussen haakjes splitsen en splitsen uit cel

Status
Niet open voor verdere reacties.

Manusje

Gebruiker
Lid geworden
8 nov 2011
Berichten
73
Besturingssysteem
W11
Office versie
O365
Goedemorgen,

Ik ben de gehele ochtend al aan het stoeien met het volgende:

In cel A2 staat Naam - meisjesnaam (PNIL123456789-10). [Nummer is niet altijd 9 cijferig, kan groter en kleiner]
Middels formule zou ik graag alleen PNIL123456789 in cel B2 willen hebben en 10 in cel C3 willen hebben.

Helaas krijg ik het niet voor elkaar.

Met onderstaande formule kom ik wel zover dat ik alles tussen de haakjes kan krijgen, maar dan moeten wel de haakjes vervangen worden door " ".
=DEEL(A5;VIND.SPEC("""";A5)+1;VIND.SPEC("""";A5;VIND.SPEC("""";A5)+1)-VIND.SPEC("""";A5)-1)
Dan krijg ik PNIL123456789-10

Wie kan mij helpen.
Alvast bedankt voor meedenken en de reactie.

Groet,
Jan
 
Ik gebruik liever geboortenaam dan 'meisjes'naam.
 
Code:
=spaties.wissen(deel(substitueren(substitueren(a2;"(";herhaling(" ";200));")";herhaling(" ";200));200;200))
 
Deze functie haalt precies op wat je vraagt.
Zet onderstaande in een module in de vba Editor.

Code:
Function jveer(cell, i)
jveer = Split(Replace(Replace(cell, "(", "-"), ")", "-"), "-")(i)
End Function

Invoeren in B2 als onderstaand. Vervolgens doortrekken naar C2

Code:
=jveer($A2;KOLOM(A1))
 
Laatst bewerkt:
Nog 2 opties voor B2 en C2 respectievelijk:
Code:
=LINKS(VERVANGEN(A2;1;VIND.SPEC("(";A2);"");VIND.SPEC("-";VERVANGEN(A2;1;VIND.SPEC("(";A2);""))-1
=SUBSTITUEREN(VERVANGEN(VERVANGEN(A2;1;VIND.SPEC("(";A2);"");1;VIND.SPEC("-";VERVANGEN(A2;1;VIND.SPEC("(";A2);""));"");")";"")
Of, als je een recente versie van Office 365 gebruikt:
Code:
=LET(x;VERVANGEN(A2;1;VIND.SPEC("(";A2);"");y;VIND.SPEC("-";x;1);LINKS(x;y-1))
=LET(x;SUBSTITUEREN(VERVANGEN(A2;1;VIND.SPEC("(";A2);"");")";"");y;VIND.SPEC("-";x;1);VERVANGEN(x;1;y;""))
 
Laatst bewerkt:
Goedemiddag AlexCel,

Ik gebruik O365, dat was ik vergeten te vermelden.
Ik heb je codes gebruikt en het werkt inderdaad.

Dankjewel voor de snelle reactie.

Groet,
Jan
 
Via Power Query zou ook nog kunnen. Geen formules nodig.
 
Dag AlexCel,

Dat ken ik niet.
Gezocht met google en zie dat dit niet meer wordt ondersteunt sinds maart 2019.
Tevens dat het niet werkt met O365.
Heb jij tips?

Zie je reactie tegemoet,
Groet,
Jan
 
Ik weet niet wat je gevonden hebt maar bovenstaande klopt niet.

Hierbij een voorbeeld met PQ. Wel wat summier met maar 1 code, maar meer heb je niet gegeven...
 

Bijlagen

https://support.microsoft.com/nl-nl...er-query-7104fbee-9e62-4cb9-a02e-5bfb1a6c536a
We raden u aan om uw gedeelde query's te downloaden, zodat u deze buiten de gegevenscatalogus kunt blijven gebruiken dan 4de maart 2019, via het taakvenster mijn gegevenscatalogus query's , met de optie Open voor elk van de query's.

Via bovenstaande site van MS.

Maar ben wel geïnteresseerd in de werking.
Waar kan ik hiervan materiaal vinden, zodat ik mij hierin kan verdiepen. En natuurlijk gebruiken in de toekomst.
Alvast bedankt,
Jan
 
De rest van de suggesties ook getest?
Het scheiden van data kan het makkelijkst met een UDF (los van power query)
 
Waar jij naar refereert is iets anders dan PQ zelf.

Zoek verder maar eens op YouTube op Power Query, dan krijg je genoeg tutorials en demonstraties van de mogelijkheden.
 
@AlexCel,

Net als bij opgenomen macro's is het natuurlijk, voor ons als beginners in PQ, wel een sport om de code met zo min mogelijk stapjes uit te laten voeren.

Code:
let
    Bron = Excel.CurrentWorkbook(){[Name="Tabel1"]}[Content],
    #"Added Custom" = Table.AddColumn(Bron, "temp", each Replacer.ReplaceText(Replacer.ReplaceText(Replacer.ReplaceText(Replacer.ReplaceText([Kolom1], " - ","~"),"(","|"),"-","|"),")","")),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Added Custom", "temp", Splitter.SplitTextByDelimiter("|", QuoteStyle.Csv), {"temp.1", "temp.2", "temp.3"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"temp.1", type text}, {"temp.2", type text}, {"temp.3", Int64.Type}}),
    #"Replaced Value" = Table.ReplaceValue(#"Changed Type","~"," - ",Replacer.ReplaceText,{"temp.1"}),
    #"Renamed Columns" = Table.RenameColumns(#"Replaced Value",{{"Kolom1", "Org"}, {"temp.1", "Naam"}, {"temp.2", "PNIL"}, {"temp.3", "Waarde"}})
in
    #"Renamed Columns"


Gaat overigens nog een leuke uitdaging worden om dit soort code 'voor de vuist weg' te programmeren:d
 
Ja, kon wel korter idd. Maar ik had niet zoveel tijd...
 
met mijn status van "novice" kan ik hooguit meelezen, laat staan meedoen om ter kortst :o
 
je hebt weeral gelijk, maar het was leuk om het ook eens op een andere manier te zien oplossen, zij het misschien minder geslaagd.
 
Het lijkt me een mug op een olifant.

Het is nu al de vijfde taal in excel.
 
Laatst bewerkt:
In deze case zou ik persoonlijk niet snel voor een udf kiezen. Maar ook niet voor power query, want je moet na de transformatie naar een tweede tabel schrijven.
De LET() vind ik een goed idee. Ik zou zoiets doen:
Code:
=LET(
PositieEersteHaakje; VIND.SPEC("("; [@Tekst]);
TekstTussenHaakjes; DEEL( [@Tekst]; PositieEersteHaakje + 1; LENGTE( [@Tekst] ) - PositieEersteHaakje - 1 );
PositieStreepje; VIND.SPEC( "-"; TekstTussenHaakjes  );
Tekst1; LINKS( TekstTussenHaakjes; PositieStreepje - 1 );
Tekst2; RECHTS( TekstTussenHaakjes; LENGTE( TekstTussenHaakjes ) - PositieStreepje );
Tekst1 )
De formule voor de cel ernaast is hetzelfde maar dan moet je de laatste Tekst1 wijzigen in Tekst2.

Off topic vraagje aan de formule experts: kan je hier ook de spill range functies gebruiken zodat je maar één functie hebt?
 
Net als bij opgenomen macro's is het natuurlijk, voor ons als beginners in PQ, wel een sport om de code met zo min mogelijk stapjes uit te laten voeren.
Hartgrondig mee oneens, dat is m.i. de verkeerde sport. Je hebt in je M-code veel moeite moeten doen om de drie Replacers te nesten, die wordt wel korter maar niet duidelijker. Bovendien kent Power Query een mechanisme dat Query Folding heet, en dat raak je bij dit soort "optimalisaties" kwijt. Laat zoveel mogelijk de userinterface het werk doen, en schrijf zo min mogelijk 'voor de vuist weg'.

Ik zou hier geen power query gebruiken maar alsdan:
Code:
let
    Source = Excel.CurrentWorkbook(){[Name="Tabel3"]}[Content],
    ColumnCopied = Table.AddColumn(Source, "Tekst1", each [Tekst]),
    SplitColumnByHaakje = Table.SplitColumn(ColumnCopied, "Tekst1", Splitter.SplitTextByEachDelimiter({" ("}, QuoteStyle.Csv, false), {"TekstX", "Tekst1"}),
    SplitColumnByStreepje = Table.SplitColumn(SplitColumnByHaakje, "Tekst1", Splitter.SplitTextByEachDelimiter({"-"}, QuoteStyle.Csv, false), {"Tekst1", "Tekst2"}),
    RemovedLaatsteHaakje = Table.ReplaceValue(SplitColumnByStreepje,")","",Replacer.ReplaceText,{"Tekst2"}),
    TempColumnRemoved = Table.RemoveColumns(RemovedLaatsteHaakje,{"TekstX"})
in
    TempColumnRemoved
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan