Excel-formule: tekst opgesplitst in matrix -

Inhoudsopgave

Generieke formule

=FILTERXML(""&SUBSTITUTE(A1,",","")&"","//y")

Samenvatting

Om tekst te splitsen met een scheidingsteken en het resultaat om te zetten in een array, kunt u de functie FILTERXML gebruiken met behulp van de functies SUBSTITUTE en TRANSPOSE. In het getoonde voorbeeld is de formule in D5:

=TRANSPOSE(FILTERXML(""&SUBSTITUTE(B5,",","")&"","//y"))

Opmerking: FILTERXML is niet beschikbaar in Excel op de Mac of in Excel Online.

Opmerking: ik heb deze truc van Bill Jelen geleerd in een MrExcel-video.

Uitleg

Excel heeft geen functie voor het splitsen van tekst in een array, vergelijkbaar met de PHP-explodeerfunctie of de Python-splitsingsmethode. Als tijdelijke oplossing kunt u de functie FILTERXML gebruiken, nadat u eerst XML-opmaak aan de tekst hebt toegevoegd.

In het getoonde voorbeeld hebben we verschillende door komma's gescheiden tekstreeksen zoals deze:

"Jim,Brown,33,Seattle,WA"

Het doel is om de informatie op te splitsen in afzonderlijke kolommen met de komma als scheidingsteken.

De eerste taak is om XML-markup aan deze tekst toe te voegen, zodat deze kan worden geparseerd als XML met de FILTERXML-functie. We gaan willekeurig van elk veld in de tekst een element maken, omsloten door een bovenliggend element. We beginnen hier met de SUBSTITUTE-functie:

SUBSTITUTE(B5,",","")

Het resultaat van SUBSTITUTE is een tekstreeks zoals deze:

"JimBrown33SeattleWA"

Om ervoor te zorgen dat de XML-tags correct zijn en om alle elementen in een bovenliggend element te verpakken, voegen we meer XML-tags toe en voegen ze als volgt toe:

""&SUBSTITUTE(B5,",","")&""

Dit levert een tekstreeks als deze op (regeleinden toegevoegd voor leesbaarheid)

" Jim Brown 33 Seattle WA "

Deze tekst wordt rechtstreeks aan de FILTERXML-functie geleverd als het xml-argument, met een Xpath-expressie van "// y":

FILTERXML("JimBrown33SeattleWA","//y")

Xpath is een parseertaal en "// y" selecteert alle elementen. Het resultaat van FILTERXML is een verticale array zoals deze:

("Jim";"Brown";33;"Seattle";"WA")

Omdat we in dit geval een horizontale array willen, wikkelen we de functie TRANSPONEREN rond FILTERXML:

=TRANSPOSE(("Jim";"Brown";33;"Seattle";"WA"))

Het resultaat is een horizontale array zoals deze:

("Jim","Brown",33,"Seattle","WA")

die in Excel 365 in het bereik D5: H5 terechtkomt.

Interessante artikelen...