Ynhâldsopjefte
In maklike manier om in array of berik yn in kolom te transformearjen mei de TOCOL-funksje.
De mooglikheid om gegevens fan kolommen nei rigen en omkeard te transponearjen is al in hiel skoft yn Excel in skoftke. Mar it konvertearjen fan in berik fan sellen yn ien kolom wie in lestige taak om te kraken. No, dat feroaret einlings. Microsoft hat in nije funksje yntrodusearre, neamd TOCOL, dy't in array-to-column-transformaasje yn in blink kin dwaan. Hjirûnder is in list mei taken dy't dizze nije funksje maklik oplosse kin.
Excel TOCOL-funksje
De TOCOL-funksje yn Excel konvertearret in array of berik fan sellen yn ien kolom.
De funksje nimt trije arguminten, mar allinnich de earste is fereaske.
TOCOL(array, [ignore], [scan_by_column])Wêr:
Array (fereaske) - in array of berik om te transformearjen yn in kolom.
Negearje (opsjoneel) - definiearret oft blanks of/en flaters negearje moatte. Kin ien fan dizze wearden wêze:
- 0 of weilitten (standert) - hâld alle wearden
- 1 - negearje blanks
- 2 - negearje flaters
- 3 - negearje blanks en flaters
Scan_by_column (opsjoneel) - bepaalt of de array horizontaal of fertikaal skansearre wurdt:
- FALSE of weilitten (standert) - scan de array foar rige fan lofts nei rjochts.
- TRUE - scan de array per kolom fan boppe nei ûnderen.
Tips:
- Om in array yn ien rige te konvertearjen, brûk de TOROWfunksje.
- Om de tsjinoerstelde kolom-nei-array-transformaasje te dwaan, brûk of de WRAPCOLS-funksje om troch kolom te wrapjen of de WRAPROWS-funksje om per rigel te wrapjen.
- Om in array fan horizontaal nei te transponearjen fertikaal of oarsom, d.w.s. feroarje rigen nei kolommen, brûk de TRANSPOSE-funksje.
TOCOL-beskikberens
TOCOL is in nije funksje, dy't wurdt stipe yn Excel foar Microsoft 365 (foar Windows) en Mac) en Excel foar it web.
Basis TOCOL-formule om berik yn kolom te transformearjen
De TOCOL-formule yn syn ienfâldichste foarm fereasket mar ien argumint - array . Bygelyks, om in twadiminsjonale array te pleatsen besteande út 3 kolommen en 4 rigen yn ien kolom, is de formule:
=TOCOL(A2:C5)
De formule wurdt mar yn ien sel ynfierd (E2 yn dit foarbyld) en spilet automatysk yn 'e ûndersteande sellen. Yn termen fan Excel wurdt it resultaat in spillbereik neamd.
Hoe wurket dizze formule:
Technysk wurdt it berik A2:C5 earst omboud ta in twadiminsjonale array. Sjoch asjebleaft de mei puntkomma skieden rigen en komma-ôfskieden kolommen:
{"Apple","Banana","Cherry";1,0,3;4,#N/A,6;7,8,9}
De TOCOL-funksje scant de array fan lofts nei rjochts en transformeart it yn in iendiminsjonale fertikale array:
{"Apple";"Banana";"Cherry";1;0;3;4;#N/A;6;7;8;9}
It resultaat wurdt pleatst yn sel E2, wêrfan it yn 'e ûnderste sellen spielet.
Hoe kinne jo de TOCOL-funksje brûke yn Excel - formulefoarbylden
Om mear begryp fan 'emooglikheden fan 'e TOCOL-funksje en hokker taken it kin dekke, litte wy ris nei guon formulefoarbylden sjen.
Array feroarje nei kolom dy't blanks en flaters negearje
Lykas jo miskien hawwe opfallen yn it foarige foarbyld , de standert TOCOL-formule hâldt alle wearden fan 'e boarne array, ynklusyf lege sellen en flaters.
Yn 'e resultearjende array wurde lege sellen fertsjintwurdige troch nullen, wat frijwat betiizjend kin wêze, benammen as de oarspronklike array hat 0 wearden. De oplossing is om blanks oer te slaan . Hjirfoar sette jo it 2e argumint op 1:
=TOCOL(A2:C5, 1)
Om flaters te negearjen , set it 2e argumint op 2:
=TOCOL(A2:C5, 2)
Om beide, blanken en flaters út te sluten, brûk 3 foar it ignore argumint:
=TOCOL(A2:C5, 3)
Scan array horizontaal of fertikaal
Mei it standert scan_by_column argumint (FALSE of weilitten), scant de TOCOL-funksje de array horizontaal foar rige. Om wearden per kolom te ferwurkjen, set dit argumint op TRUE of 1. Bygelyks:
=TOCOL(A2:C5, ,TRUE)
Merk op dat, yn beide gefallen, de weromjûne arrays deselde grutte binne, mar de wearden binne regele yn in oare folchoarder.
Kombinearje meardere berik yn ien kolom
As jo te krijen hawwe mei ferskate net-oanlizzende berik, dan kinne jo earst de berik fertikaal kombinearje yn ien array mei help fan de VSTACK-funksje, en brûk dan TOCOL om de kombinearre array yn in kolom te transformearjen.
Oannommen dat it earste berik A2:C4 is en it twadde berik A8:C9 is, nimt de formule dizze foarm oan:
=TOCOL(VSTACK(A2:C4, A8:C9))
Dizze formule lit it standertgedrach sjen - lêst de kombineare arrays horizontaal fan lofts nei rjochts lykas werjûn yn kolom E yn de ôfbylding hjirûnder.
Om wearden fertikaal fan boppe nei ûnderen te lêzen, set jo it 3e argumint fan TOCOL op TRUE:
=TOCOL(VSTACK(A2:C4, A8:C9), ,TRUE)
Tink derom dat, yn dit gefal, de formule earst wearden werom jout fan kolom A fan beide arrays, dan fan kolom B, ensfh. De reden is dat TOCOL in inkele steapele array scant, net de orizjinele yndividuele berik.
As jo bedriuwslogika fereasket om de orizjinele berik horizontaal te stapeljen ynstee fan fertikaal, brûk dan de HSTACK-funksje ynstee fan VSTACK.
Om elke folgjende array oan 'e rjochterkant fan' e foarige array ta te foegjen en te lêzen de kombineare arrays horizontaal, de formule is:
=TOCOL(HSTACK(A2:C4, A8:C10))
Om elke folgjende array oan de rjochterkant fan de foarige array ta te foegjen en de kombinearre arrays fertikaal te scannen, is de formule:
=TOCOL(HSTACK(A2:C4, A8:C10), ,TRUE)
Unike wearden ekstrahearje út in berik mei meardere kolommen
De Excel UNIQUE-funksje kin maklik unike yn ien kolom of rige fine en unike rigen weromjaan, mar it kin gjin unike wearden útpakke út in array mei meardere kolommen. De oplossing is om it tegearre mei de TOCOL-funksje te brûken.
Om bygelyks alle ferskillende (ûnderskate) wearden út it berik te heljenA2:C7, de formule is:
=UNIQUE(TOCOL(A2:C7))
Derneist kinne jo de boppesteande formule yn 'e SORT-funksje ferpakke om de weromjûne array yn alfabetyske folchoarder te regeljen:
=SORT(UNIQUE(TOCOL(A2:C7)))
Hoe berikke konvertearje nei kolom yn Excel 365 - 2010
Yn Excel-ferzjes wêr't de TOCOL-funksje net stipe wurdt, besteane d'r in pear alternative manieren om in berik fan sellen yn in kolom te transformearjen. Dizze oplossingen binne frij lestich, mar wurkje dochs.
Om it berik foar rige te lêzen:
INDEX( berik , KWOTIENT(RIJ(A1)-1, KOLOMMEN( berik ))+1, MOD(ROW(A1)-1, COLUMNS( berik ))+1)Om it berik per kolom te lêzen:
INDEX( berik , MOD(RIJ(A1)-1, ROWS( berik ))+1, KWOTIENT(RIJ(A1)-1, ROWS( berik ))+1 )Foar ús foarbylddataset binne de formules as folget:
Om it berik horizontaal fan lofts nei rjochts te scannen :
=INDEX($A$2:$C$5, QUOTIENT(ROW(A1)-1, COLUMNS($A$2:$C$5))+1, MOD(ROW(A1)-1, COLUMNS($A$2:$C$5))+1)
Dizze formule is lykweardich oan de TOCOL-funksje mei it 3e argumint ynsteld op FALSE of weilitten:
=TOCOL(A2:C5)
Om it berik fertikaal fan boppen nei ûnderen te scannen :
=INDEX($A$2:$C$5, MOD(ROW(A1)-1, ROWS($A$2:$C$5))+1, QUOTIENT(ROW(A1)-1, ROWS($A$2:$C$5))+1)
Dizze formule is te fergelykjen mei de TOCOL-funksje mei it 3e argumint ynsteld op TRUE:
=TOCOL(A2:C5, ,TRUE)
Oars as TOCOL, moatte de alternative formules yn elk ynfierd wurde sel wêr jo wolle dat de resultaten ferskine. Yn ús gefal geane de formules nei sellen E2 (per rige) en G2 (per kolom), en wurde dan kopieare nei rige 13.
As de formules nei mear rigen kopiearre wurde dan nedich, in#REF! flater sil ferskine yn "ekstra" sellen. Om foar te kommen dat dit bart, kinne jo de formules yn 'e IFERROR-funksje sa nestelje:
=IFERROR(INDEX($A$2:$C$5, QUOTIENT(ROW(A1)-1, COLUMNS($A$2:$C$5))+1, MOD(ROW(A1)-1, COLUMNS($A$2:$C$5))+1), "")
Merk op dat foar de formules om goed te kopiearjen, wy it berik beskoattelje mei absolute selferwizings ($ A$2:$C$5). Ynstee dêrfan kinne jo in neamd berik brûke.
Hoe't dizze formules wurkje
Hjirûnder is in detaillearre ferdieling fan 'e earste formule dy't sellen per rige regelet:
=INDEX($A$2:$C$5, QUOTIENT(ROW(A1)-1, COLUMNS($A$2:$C$5))+1, MOD(ROW(A1)-1, COLUMNS($A$2:$C$5))+1)
It idee is om de INDEX-funksje te brûken om de wearde fan in bepaalde sel werom te jaan op basis fan syn relative rige- en kolomnûmers yn it berik.
It rigenûmer wurdt berekkene troch dizze kombinaasje :
QUOTIENT(ROW(A1)-1, COLUMNS($A$2:$C$5))+1
QUOTIENT jout it hiele getal diel fan in divyzje werom.
Foar teller brûke jo ROW(A1)-1, dy't in weromjout in searjenûmer fan 0 yn E2 (earste sel wêr't de formule yn ynfierd is) oant 11 yn E13 (de lêste sel wêr't de formule yn ynfierd is).
De noemer troch COLUMNS($A) $2:$C$5)) is konstant en is lyk oan it oantal kolommen yn jo berik (3 yn ús gefal).
No, as jo it resultaat fan it QUOTIENT kontrolearje foar de earste 3 sellen (E2:E4) , Jo sille sjen dat it is gelyk oan 0 (omdat it hiele getal diel fan de divyzje is nul). It tafoegjen fan 1 jout it rige nûmer 1.
Foar de folgjende 3 sellen (E5:E5), jout QUOTIENT 1 werom, en de +1-operaasje leveret it rigelnûmer 2. Ensafuorthinne.
Mei oare wurden, dit diel fan 'e formule makket in werhellingnûmersekwinsje lykas 1,1,1,2,2,2,3,3,3,4,4,4,... Elk nûmer wurdt werhelle safolle kearen as der kolommen yn jo berik binne.
Om berekkenje it kolomnûmer , bouwe jo in passende nûmersekwinsje mei de MOD-funksje:
MOD(ROW(A1)-1, COLUMNS($A$2:$C$5))+1
Om't d'r 3 kolommen binne yn ús berik (A2:C5), is de folchoarder moat 1,2,3,1,2,3,...
De MOD-funksje jout de rest nei divyzje werom.
Yn E2, MOD(RIJ(A1)-1, KOLUMNS ($A$2:$C$5))+1)
wurdt
MOD(1-1, 3)+1)
en jout 1.
Yn E3 wurdt MOD(ROW(A2)-1, COLUMNS($A$2:$C$5))+1)
MOD(2-1, 3) +1)
en jout 2.
Mei de rige- en kolomnûmers fêststeld, hat INDEX gjin problemen om de fereaske wearde op te heljen.
Yn E2, INDEX($A$2 :$C$5, 1, 1) jout de wearde werom út de 1e rige en de 1e kolom fan it ferwiisde berik, dus út sel A2.
In E3, INDEX($A$2:$C$5, 1 , 2) jout de wearde werom fan 'e 1e rige en de 2e kolom, dus út sel B2.
Ensafuorthinne.
De twadde formule dy't it berik scant mei c olumn, wurket op in fergelykbere wize. It ferskil is dat it MOD brûkt om it rigenûmer te krijen en QUOTIENT om it kolomnûmer te krijen.
TOCOL-funksje wurket net
As de TOCOL-funksje in flater smyt, is it meast wierskynlik om ien fan dizze redenen te wêzen:
TOCOL wurdt net stipe yn jo Excel
As jo in #NAME krije? flater, de juste stavering fan de namme fan de funksje is it earste ding omkontrôle. As de namme goed is, mar de flater bliuwt, is de funksje net beskikber yn jo ferzje fan Excel. Besykje yn dit gefal in TOCOL-alternatyf te brûken.
Array is te grut
In #NUM-flater jout oan dat de array net yn in kolom passe kin. In typysk gefal is as jo ferwize nei folsleine kolommen of rigen.
Der binne net genôch lege sellen
As in #SPILL-flater optreedt, kontrolearje dan dat de kolom wêryn de formule ynfierd is hat genôch lege sellen om te foljen mei de resultaten. As de sellen visueel leech binne, soargje derfoar dat der gjin spaasjes en oare net-printe tekens yn binne. Foar mear ynformaasje, sjoch Hoe kinne jo de #SPILL-flater reparearje yn Excel.
Sa kinne jo de TOCOL-funksje yn Excel 365 en alternative oplossings yn eardere ferzjes brûke om in 2-diminsjonale array yn ien kolom te transformearjen. Ik tankje jo foar it lêzen en hoopje jo nije wike op ús blog te sjen!
Oefeningswurkboek
Excel TOCOL-funksje - formulefoarbylden (.xlsx-bestân)