Inhoudsopgave
Een eenvoudige manier om een matrix of bereik om te zetten in een kolom met de functie TOCOL.
De mogelijkheid om gegevens om te zetten van kolommen naar rijen en omgekeerd zit al een tijdje in Excel. Maar het omzetten van een reeks cellen naar een enkele kolom was een lastige taak om te kraken. Nu komt daar eindelijk verandering in. Microsoft heeft een nieuwe functie geïntroduceerd, genaamd TOCOL, die in een oogwenk een matrix-naar-kolom transformatie kan uitvoeren. Hieronder volgt een lijst van taken die deze nieuwe functie gemakkelijk kan oplossen.
Excel TOCOL functie
De functie TOCOL in Excel converteert een array of bereik van cellen naar een enkele kolom.
De functie neemt drie argumenten, maar alleen het eerste is vereist.
TOCOL(array, [ignore], [scan_by_column])Waar:
Array (verplicht) - een matrix of bereik om te zetten in een kolom.
Negeer (facultatief) - bepaalt of spaties en/of fouten moeten worden genegeerd. Kan een van deze waarden zijn:
- 0 of weggelaten (standaard) - alle waarden behouden
- 1 - spaties negeren
- 2 - fouten negeren
- 3 - spaties en fouten negeren
Scan_per_kolom (facultatief) - bepaalt of de matrix horizontaal of verticaal wordt gescand:
- FALSE of weggelaten (standaard) - scan de matrix per rij van links naar rechts.
- TRUE - scan de matrix per kolom van boven naar beneden.
Tips:
- Om een matrix om te zetten in een enkele rij, gebruikt u de functie TOROW.
- Om de omgekeerde kolom-naar-rij transformatie te doen, gebruikt u ofwel de functie WRAPCOLS om per kolom te verpakken, ofwel de functie WRAPROWS om per rij te verpakken.
- Gebruik de functie TRANSPOSE om een matrix te transponeren van horizontaal naar verticaal of omgekeerd, d.w.z. van rijen naar kolommen.
TOCOL beschikbaarheid
TOCOL is een nieuwe functie, die wordt ondersteund in Excel voor Microsoft 365 (voor Windows en Mac) en Excel voor het web.
Basis TOCOL-formule om bereik in kolom om te zetten
De TOCOL-formule in zijn eenvoudigste vorm vereist slechts één argument - array Om bijvoorbeeld een tweedimensionale matrix bestaande uit 3 kolommen en 4 rijen in een enkele kolom te plaatsen, is de formule:
=TOCOL(A2:C5)
De formule wordt slechts in één cel ingevoerd (E2 in dit voorbeeld) en loopt automatisch over naar de cellen eronder. In termen van Excel wordt het resultaat een overloopbereik genoemd.
Hoe deze formule werkt:
Technisch gezien wordt het bereik A2:C5 eerst omgezet in een tweedimensionale array. Let op de door een puntkomma gescheiden rijen en door komma's gescheiden kolommen:
{"Apple","Banana","Cherry";1,0,3;4,#N/A,6;7,8,9}
De TOCOL-functie scant de matrix van links naar rechts en zet hem om in een ééndimensionale verticale matrix:
{"Apple";"Banana";"Cherry";1;0;3;4;#N/A;6;7;8;9}
Het resultaat wordt in cel E2 geplaatst, van waaruit het in de onderstaande cellen terechtkomt.
Hoe de TOCOL functie gebruiken in Excel - formulevoorbeelden
Om meer inzicht te krijgen in de mogelijkheden van de TOCOL-functie en welke taken zij kan vervullen, laten we enkele formulevoorbeelden bekijken.
Matrix omzetten naar kolom waarbij spaties en fouten worden genegeerd
Zoals u misschien in het vorige voorbeeld hebt opgemerkt, houdt de standaard TOCOL-formule alle waarden uit de bronmatrix, inclusief lege cellen en fouten.
In de resulterende matrix worden lege cellen voorgesteld door nullen, wat nogal verwarrend kan zijn, vooral als de oorspronkelijke matrix 0 waarden heeft. De oplossing is om losse flodders overslaan Hiervoor zet u het 2e argument op 1:
=TOCOL(A2:C5, 1)
Naar fouten negeren zet het 2e argument op 2:
=TOCOL(A2:C5, 2)
Om beide uit te sluiten, blanco's en fouten gebruik 3 voor de negeer argument:
=TOCOL(A2:C5, 3)
Scan array horizontaal of verticaal
Met de standaard scan_by_column argument (FALSE of weggelaten) scant de TOCOL-functie de matrix horizontaal per rij. Om waarden per kolom te verwerken, stelt u dit argument in op TRUE of 1. Bijvoorbeeld:
=PROTOCOL(A2:C5,,TRUE)
Merk op dat in beide gevallen de arrays dezelfde grootte hebben, maar dat de waarden in een andere volgorde zijn gerangschikt.
Meerdere bereiken combineren in één kolom
Als u te maken hebt met verschillende niet-aaneengesloten bereiken, kunt u de bereiken eerst verticaal combineren tot één matrix met behulp van de functie VSTACK, en vervolgens TOCOL gebruiken om de gecombineerde matrix om te zetten in een kolom.
Ervan uitgaande dat het eerste bereik A2:C4 is en het tweede bereik A8:C9, heeft de formule deze vorm:
=TOCOL(VSTACK(A2:C4, A8:C9))
Deze formule demonstreert het standaardgedrag - leest de gecombineerde matrices horizontaal van links naar rechts, zoals getoond in kolom E in de onderstaande afbeelding.
Om waarden verticaal van boven naar beneden te lezen, stelt u het 3e argument van TOCOL in op TRUE:
=PROTOCOL(VSTACK(A2:C4, A8:C9),,TRUE)
Let erop dat de formule in dit geval eerst waarden retourneert uit kolom A van beide matrices, dan uit kolom B, enzovoort. De reden is dat TOCOL een enkele gestapelde matrix scant, niet de oorspronkelijke afzonderlijke bereiken.
Als uw bedrijfslogica vereist dat de oorspronkelijke bereiken horizontaal in plaats van verticaal worden gestapeld, gebruik dan de functie HSTACK in plaats van VSTACK.
Om elke volgende matrix toe te voegen aan de rechterkant van de vorige matrix en de gecombineerde matrices horizontaal te lezen, is de formule:
=TOCOL(HSTACK(A2:C4, A8:C10))
Om elke volgende matrix rechts van de vorige op te tellen en de gecombineerde matrices verticaal te scannen, is de formule:
=TOCOL(HSTACK(A2:C4, A8:C10),,TRUE)
Unieke waarden uit een reeks met meerdere kolommen halen
De Excel UNIQUE functie kan gemakkelijk unieke waarden vinden in een enkele kolom of rij en unieke rijen retourneren, maar kan geen unieke waarden halen uit een matrix met meerdere kolommen. De oplossing is om de functie te gebruiken in combinatie met de TOCOL functie.
Om bijvoorbeeld alle verschillende (afzonderlijke) waarden uit het bereik A2:C7 te halen, is de formule:
=UNIQUE(TOCOL(A2:C7))
Bovendien kunt u de bovenstaande formule omwikkelen met de functie SORT om de geretourneerde matrix in alfabetische volgorde te rangschikken:
=SORT(UNIQUE(TOCOL(A2:C7))
Hoe bereik naar kolom converteren in Excel 365 - 2010
In Excel-versies waar de TOCOL-functie niet wordt ondersteund, bestaan er een paar alternatieve manieren om een bereik van cellen om te zetten in een kolom. Deze oplossingen zijn vrij lastig, maar werken hoe dan ook.
Om het bereik per rij te lezen:
INDEX( reeks , QUOTIËNT(RIJ(A1)-1, KOLOMMEN( reeks ))+1, MOD(RIJ(A1)-1, KOLOMMEN( reeks ))+1)Om het bereik per kolom te lezen:
INDEX( reeks , MOD(RIJ(A1)-1, RIJEN( reeks ))+1, QUOTIËNT(RIJ(A1)-1, RIJEN( reeks ))+1)Voor onze voorbeelddataset zijn de formules als volgt:
Om het bereik te scannen horizontaal van links naar rechts :
=INDEX($A$2:$C$5, QUOTIËNT(RIJ(A1)-1, KOLOMMEN($A$2:$C$5))+1, MOD(RIJ(A1)-1, KOLOMMEN($A$2:$C$5))+1)
Deze formule is gelijk aan de TOCOL-functie met het derde argument op FALSE gezet of weggelaten:
=TOCOL(A2:C5)
Om het bereik te scannen verticaal van boven naar beneden :
=INDEX($A$2:$C$5, MOD(RIJ(A1)-1, RIJEN($A$2:$C$5))+1, QUOTIËNT(RIJ(A1)-1, RIJEN($A$2:$C$5))+1)
Deze formule is vergelijkbaar met de TOCOL-functie met het derde argument ingesteld op TRUE:
=PROTOCOL(A2:C5,,TRUE)
In tegenstelling tot TOCOL moeten de alternatieve formules worden ingevoerd in elke cel waar u wilt dat de resultaten verschijnen. In ons geval gaan de formules naar de cellen E2 (per rij) en G2 (per kolom), en worden vervolgens naar beneden gekopieerd naar rij 13.
Als de formules naar meer rijen worden gekopieerd dan nodig, verschijnt er een #REF! fout in "extra" cellen. Om dit te voorkomen, kunt u de formules als volgt in de IFERROR-functie nesten:
=IFERROR(INDEX($A$2:$C$5, QUOTIËNT(RIJ(A1)-1, KOLOMMEN($A$2:$C$5))+1, MOD(RIJ(A1)-1, KOLOMMEN($A$2:$C$5))+1), "")
Merk op dat om de formules correct te kopiëren, we het bereik vergrendelen met absolute celverwijzingen ($A$2:$C$5). In plaats daarvan kunt u een genoemd bereik gebruiken.
Hoe deze formules werken
Hieronder volgt een gedetailleerde uitsplitsing van de eerste formule die de cellen per rij rangschikt:
=INDEX($A$2:$C$5, QUOTIËNT(RIJ(A1)-1, KOLOMMEN($A$2:$C$5))+1, MOD(RIJ(A1)-1, KOLOMMEN($A$2:$C$5))+1)
Het idee is om de INDEX-functie te gebruiken om de waarde van een bepaalde cel terug te geven op basis van zijn relatieve rij- en kolomnummers in het bereik.
De rijnummer wordt berekend door deze combinatie:
QUOTIËNT(RIJ(A1)-1, KOLOMMEN($A$2:$C$5))+1
QUOTIENT geeft het gehele getal van een deling.
Voor teller gebruikt u ROW(A1)-1, wat een volgnummer oplevert van 0 in E2 (de eerste cel waar de formule is ingevoerd) tot 11 in E13 (de laatste cel waar de formule is ingevoerd).
De noemer door COLUMNS($A$2:$C$5)) is constant en gelijk aan het aantal kolommen in uw bereik (3 in ons geval).
Als u nu het resultaat van het QUOTIENT controleert voor de eerste 3 cellen (E2:E4), ziet u dat het gelijk is aan 0 (omdat het gehele deel van de deling nul is). Door 1 toe te voegen krijgt u het rijnummer 1.
Voor de volgende 3 cellen (E5:E5) geeft QUOTIENT 1, en de +1 bewerking levert het rijnummer 2. En zo verder.
Met andere woorden, dit deel van de formule maakt een zich herhalende getallenreeks zoals 1,1,1,2,2,3,3,3,4,4,4,... Elk getal wordt zo vaak herhaald als er kolommen in uw bereik zijn.
Om de kolomnummer bouw je een passende cijferreeks op met de MOD-functie:
MOD(RIJ(A1)-1, KOLOMMEN($A$2:$C$5))+1
Aangezien er 3 kolommen zijn in ons bereik (A2:C5), moet de volgorde 1,2,3,1,2,3,... zijn.
De MOD-functie geeft de rest na deling.
In E2, MOD(ROW(A1)-1, COLUMNS($A$2:$C$5))+1)
wordt
MOD(1-1, 3)+1)
en geeft 1 terug.
In E3, MOD(ROW(A2)-1, COLUMNS($A$2:$C$5))+1)
wordt
MOD(2-1, 3)+1)
en geeft 2 terug.
Met de rij- en kolomnummers vastgesteld, heeft INDEX geen problemen om de vereiste waarde op te halen.
In E2 geeft INDEX($A$2:$C$5, 1, 1) de waarde terug uit de eerste rij en de eerste kolom van het bereik waarnaar wordt verwezen, d.w.z. uit cel A2.
In E3 geeft INDEX($A$2:$C$5, 1, 2) de waarde uit de eerste rij en de tweede kolom, dus uit cel B2.
En zo verder.
De tweede formule, die het bereik per kolom scant, werkt op dezelfde manier. Het verschil is dat deze formule MOD gebruikt om het rijnummer te krijgen en QUOTIENT om het kolomnummer te krijgen.
TOCOL functie werkt niet
Als de TOCOL-functie een foutmelding geeft, is dat waarschijnlijk om een van deze redenen:
TOCOL wordt niet ondersteund in uw Excel
Wanneer u een #NAME? foutmelding krijgt, is de correcte spelling van de naam van de functie het eerste wat u moet controleren. Als de naam correct is, maar de fout blijft bestaan, is de functie niet beschikbaar in uw versie van Excel. Overweeg in dat geval een TOCOL alternatief te gebruiken.
Array is te groot
Een #NUM-fout geeft aan dat de array niet in een kolom past. Een typisch geval is wanneer u naar hele kolommen of rijen verwijst.
Er zijn niet genoeg lege cellen
Wanneer een #SPILL-fout optreedt, controleert u of de kolom waarin de formule is ingevoerd voldoende lege cellen heeft om met de resultaten te worden gevuld. Als de cellen visueel leeg zijn, controleert u of er geen spaties en andere niet-afdrukbare tekens in staan. Zie voor meer informatie Hoe de #SPILL-fout in Excel op te lossen.
Dat is hoe u de TOCOL-functie in Excel 365 en alternatieve oplossingen in eerdere versies kunt gebruiken om een 2-dimensionale matrix om te zetten in een enkele kolom. Ik dank u voor het lezen en hoop u volgende week op onze blog te zien!
Praktijk werkboek
Excel TOCOL functie - formulevoorbeelden (.xlsx bestand)