Ynhâldsopjefte
De fluchste manier om in kolom of rige wearden te transformearjen yn in twadiminsjonale array is mei de WRAPCOLS- of WRAPROWS-funksje.
Sûnt de ierste dagen fan Excel is it west tige goed yn it berekkenjen en analysearjen fan sifers. Mar it manipulearjen fan arrays hat tradisjoneel in útdaging west. De ynfiering fan dynamyske arrays makke it gebrûk fan arrayformules in stik makliker. En no lit Microsoft in set nije dynamyske arrayfunksjes frij om arrays te manipulearjen en opnij te foarmjen. Dizze tutorial sil jo leare hoe't jo twa sokke funksjes brûke, WRAPCOLS en WRAPROWS, om in kolom of rige yn gjin tiid te transformearjen yn in 2D-array.
Excel WRAPCOLS-funksje
De WRAPCOLS-funksje yn Excel transformearret in rige of kolom mei wearden yn in twadiminsjonale array basearre op it opjûne oantal wearden per rigel.
De syntaksis hat de folgjende arguminten:
WRAPCOLS(vector, wrap_count, [pad_with])Wêr:
- vector (ferplicht) - de boarne iendiminsjonale array of berik.
- wrap_count (ferplicht) - it maksimum oantal wearden per kolom.
- pad_with (opsjoneel) - de wearde om te foljen mei de lêste kolom as d'r net genôch items binne om it te foljen. As se weilitten wurde, wurde de ûntbrekkende wearden opfolle mei #N/A (standert).
Om bygelyks it berik B5:B24 te feroarjen nei in 2-diminsjonale array mei 5 wearden per kolom, formule is:
=WRAPROWS(B5:B24, 5)
Jo ynfiere deit vektor -argumint is gjin iendiminsjonale array.
#NUM! flater
In #NUM-flater komt foar as de wrap_count wearde 0 of negatyf getal is.
#SPILL! flater
Meastentiids jout in #SPILL-flater oan dat d'r net genôch lege sellen binne om de resultaten yn te smiten. Wiskje de oanbuorjende sellen, en it sil fuort wêze. As de flater oanhâldt, besjoch dan wat #SPILL betsjut yn Excel en hoe't jo it reparearje.
Dat is hoe't jo de WRAPCOLS- en WRAPROWS-funksjes brûke om in iendiminsjonaal berik te konvertearjen yn in twadimensjonale array yn Excel. Ik tankje jo foar it lêzen en hoopje jo nije wike op ús blog te sjen!
Oefeningswurkboek foar download
WRAPCOLS- en WRAPROWS-funksjes - foarbylden (.xlsx-bestân)
formule yn ien inkelde sel en it spilet automatysk yn safolle sellen as nedich. Yn 'e WRAPCOLS-útfier binne de wearden fertikaal arranzjearre, fan boppen nei ûnderen, basearre op de wearde wrap_count. Nei't de telling berikt is, wurdt in nije kolom begon.
Excel WRAPROWS-funksje
De WRAPROWS-funksje yn Excel konvertearret in rige of kolom mei wearden yn in twadiminsjonale array basearre op it oantal wearden per rige dat jo oantsjutte.
De syntaksis is as folget:
WRAPROWS(vector, wrap_count, [pad_with])Wêr:
- vector (ferplicht) - de boarne iendiminsjonaal array of berik.
- wrap_count (ferplicht) - it maksimum oantal wearden per rigel.
- pad_with (opsjoneel) - de wearde nei pad mei de lêste rige as d'r net genôch items binne om it te foljen. De standert is #N/A.
Om bygelyks it berik B5:B24 te transformearjen yn in 2D-array mei 5 wearden yn elke rige, is de formule:
=WRAPROWS(B5:B24, 5)
Jo ynfiere de formule yn 'e sel linksboppe fan it spillbereik, en it populearret alle oare sellen automatysk. De WRAPROWS-funksje regelet de wearden horizontaal, fan links nei rjochts, basearre op de wrap_count wearde. Nei it berikken fan de telling, it begjint in nije rige.
WRAPCOLS- en WRAPROWS-beskikberens
Beide funksjes binne allinnich beskikber yn Excel foar Microsoft 365 (Windows en Mac) en Excel foar it web.
Yn eardereferzjes, kinne jo tradisjonele mear komplekse formules brûke om kolom-nei-array- en rige-nei-array-transformaasjes út te fieren. Fierderop yn dizze tutorial sille wy de alternative oplossings yn detail beprate.
Tip. Om in omkearde operaasje te dwaan, d.w.s. feroarjen fan in 2D-array nei ien kolom of rige, brûk respektivelik de TOCOL- of TOROW-funksje.
Hoe kinne jo kolom / rige konvertearje nei berik yn Excel - foarbylden
No't jo it basisgebrûk yn 'e hân hawwe, litte wy in pear mear spesifike gefallen fan tichterby besjen.
Stel it maksimum oantal wearden per kolom of rige yn
Ofhinklik fan de struktuer fan jo orizjinele gegevens, kinne jo fine dat it gaadlik wurde opnij ynrjochte yn kolommen (WRAPCOLS) of rigen (WRAPROWS). Hokker funksje jo ek brûke, it is it argumint wrap_count dat it maksimum oantal wearden yn elke kolom/rige bepaalt.
Om bygelyks it berik B4:B23 te transformearjen yn in 2D-array, sadat elke kolom maksimaal 10 wearden hat, brûk dan dizze formule:
=WRAPCOLS(B4:B23, 10)
Om itselde berik foar rige wer te regeljen, sadat elke rige maksimaal 4 wearden hat, is de formule :
=WRAPROWS(B4:B23, 4)
De ôfbylding hjirûnder lit sjen hoe't dit der útsjocht:
Pad ûntbrekkende wearden yn 'e resultearjende array
Yn gefal d'r net genôch wearden binne om te foljen alle kolommen/rijen fan it resultearjende berik, WRAPROWS en WRAPCOLS sille #N/A flaters weromjaan om de struktuer fan 'e 2D-array te hâlden.
Om de standert te feroarjengedrach, kinne jo in oanpaste wearde leverje foar it opsjonele pad_with argumint.
Bygelyks, om it berik B4:B21 te transformearjen yn in 2D-array mei maksimaal 5 wearden breed, en de lêste pad rige mei streepkes as d'r net genôch gegevens binne om it yn te foljen, brûk dan dizze formule:
=WRAPROWS(B4:B21, 5, "-")
Om de ûntbrekkende wearden te ferfangen troch stringen fan nul lingte (blanks), is de formule:
=WRAPROWS(B4:B21, 5, "")
Fergelykje de resultaten mei it standertgedrach (formule yn D5) wêrby't pad_with is weilitten:
Meidige rigen gearfoegje yn 2D-berik
Om in pear aparte rigen te kombinearjen yn ien inkele 2D-array, stapelje jo de rigen earst horizontaal mei de HSTACK-funksje, en wikkelje dan de wearden mei WRAPROWS of WRAPCOLS.
Om bygelyks de wearden út te fusearjen fan 3 rigen (B5: J5, B7: G7 en B9: F9) en wikkel yn kolommen, elk mei 10 wearden, de formule is:
=WRAPCOLS(HSTACK(B5:J5, B7:G7, B9:F9), 10)
Om wearden fan meardere rigen te kombinearjen yn in 2D-berik wêrby't elke rige 5 wearden befettet, nimt de formule dizze foarm oan:
=WRAPROWS(HSTACK(B5:J5, B7:G7, B9:F9), 5)
C ombine meardere kolommen yn 2D-array
Om ferskate kolommen te fusearjen yn in 2D-berik, stapelje jo se earst fertikaal mei de VSTACK-funksje, en ferpakke de wearden dan yn rigen (WRAPROWS) of kolommen (WRAPCOLS).
Om bygelyks de wearden fan 3 kolommen (B5: J5, B7: G7 en B9: F9) te kombinearjen yn in 2D-berik wêr't elke kolom 10 wearden befettet, is de formule:
=WRAPCOLS(HSTACK(B5:J5, B7:G7, B9:F9), 10)
Om kombinearje dedeselde kolommen yn in 2D-berik wêr't elke rige 5 wearden befettet, brûk dizze formule:
=WRAPROWS(HSTACK(B5:J5, B7:G7, B9:F9), 5)
Wrap en sortearje de array
Yn situaasje as it boarneberik wearden hat yn willekeurich folchoarder wylst jo wolle dat de útfier sortearre wurdt, gean dan troch op dizze manier:
- Sortearje de begjinarray sa't jo wolle mei de SORT-funksje.
- Lear de sortearre array oan WRAPCOLS of WRAPROWS.
Om bygelyks it berik B4:B23 yn rigen te wikkeljen, 4 wearden yn elk, en it resultearjende berik fan A oant Z te sortearjen, konstruearje in formule lykas dizze:
=WRAPROWS(SORT(B4:B23), 4)
Om itselde berik yn kolommen te wikkeljen, 10 wearden yn elk, en de útfier alfabetysk te sortearjen, is de formule:
=WRAPCOLS(SORT(B4:B23), 10)
De resultaten sjogge der sa út :
Tip. Om de wearden yn 'e resultearjende array yn ôfnimmende folchoarder te regeljen, set it tredde argumint ( sort_order ) fan de SORT-funksje op -1.
WRAPCOLS-alternatyf foar Excel 365 - 2010
Yn âldere Excel-ferzjes wêr't de WRAPCOLS-funksje net stipe wurdt, kinne jo jo eigen formule bouwe om de wearden fan in iendiminsjonale array yn kolommen te wikkeljen. Dit kin dien wurde troch 5 ferskillende funksjes tegearre te brûken.
WRAPCOLS alternatyf om in rige te konvertearjen yn 2D berik:
IFERROR(IF(RIW(A1)> n , "" , INDEX( rige_berik , , ROW(A1) + (COLUMN(A1)-1)* n )), "")WRAPCOLS alternatyf foar it konvertearjen fan in kolom yn 2D berik:
IFERROR(IF(RIJ(A1)> n ,"", INDEX( column_range , ROW(A1) + (COLUMN(A1)-1)* n )), "")Wêr n is it maksimum oantal wearden per kolom.
Yn de ûndersteande ôfbylding brûke wy de folgjende formule om in rigel fan ien rige (D4:J4) yn in array fan trije rigen te feroarjen.
=IFERROR(IF(ROW(A1)>3, "", INDEX($D$4:$J$4, , ROW(A1) + (COLUMN(A1)-1)*3)), "")
En dizze formule feroaret in berik fan ien kolom (B4: B20) yn in array mei fiif rigen:
=IFERROR(IF(ROW(A1)>5, "", INDEX($B$4:$B$20, ROW(A1) + (COLUMN(A1)-1)*5)), "")
De boppesteande oplossingen emulearje de analoge WRAPCOLS-formules en produsearje deselde resultaten:
=WRAPCOLS(D4:J4, 3, "")
en
=WRAPCOLS(B4:B20, 5, "")
Hâld der rekken mei dat yn tsjinstelling ta de dynamyske array WRAPCOLS-funksje, de tradisjonele formules folgje de ien-formule-ien-sel oanpak. Dat, ús earste formule wurdt ynfierd yn D8 en kopieare 3 rigen nei ûnderen en 3 kolommen nei rjochts. De twadde formule wurdt ynfierd yn D14 en kopiearre 5 rigen del en 4 kolommen nei rjochts.
Hoe't dizze formules wurkje
Yn it hert fan beide formules brûke wy de INDEX-funksje dy't in wearde werombringt fan 'e levere array basearre op in rige en kolomnûmer:
INDEX(array, row_num, [column_num])As wy te krijen hawwe mei ien-rige array, kinne wy it argumint row_num weilitte, sadat it standert is op 1. De trúk is om te hawwen col_num automatysk berekkene foar elke sel wêr't de formule kopiearre is. En hjir is hoe't wy dit dogge:
ROW(A1)+(COLUMN(A1)-1)*3)
De funksje ROW jout it rigenûmer fan de A1-referinsje werom, dat is 1.
De funksje KOLOM jout it kolomnûmer werom fande A1 referinsje, dat is ek 1. Subtracting 1 makket it yn nul. En it fermannichfâldigjen fan 0 mei 3 jout 0.
Dan, jo optelle 1 werom troch ROW en 0 werom troch COLUMN en krije 1 as gefolch.
Op dizze manier, de INDEX formule yn 'e boppeste -loftersel fan it bestimmingsberik (D8) ûndergiet dizze transformaasje:
INDEX($D$4:$J$4, ,ROW(A1) + (COLUMN(A1)-1)*3))
feroaret yn
INDEX($D$4:$J$4, ,1)
en jout de wearde werom út 'e 1e kolom fan 'e oantsjutte array, dat is "Apples" yn D4.
As de formule nei sel D9 kopiearre wurdt, feroarje de relative selferwizings basearre op in relative posysje fan rigen en kolommen, wylst de absolute berikferwizing net feroaret:
INDEX($D$4:$J$4,, ROW(A2)+(COLUMN(A2)-1)*3))
feroaret yn:
INDEX($D$4:$J$4,, 2+(1-1)*3))
wurdt:
INDEX($D$4:$J$4,, 2))
en jout de wearde werom út de 2e kolom fan de oantsjutte array, dat is "Aprikotten" yn E4.
De IF-funksje kontrolearret it rigenûmer en as it grutter is as it oantal rigen dat jo opjûn hawwe (3 yn ús gefal) jout in lege tekenrige ( ""), oars it resultaat fan de INDEX-funksje:
IF(ROW(A1)>3, "", INDEX(…))
As lêste reparearret de IFERROR-funksje in #REF! flater dy't optreedt as de formule wurdt kopiearre nei mear sellen dan echt nedich.
De twadde formule dy't konvertearret in kolom yn 2D berik wurket mei deselde logika. It ferskil is dat jo de kombinaasje ROW + COLUMN brûke om it argumint row_num foar INDEX út te finen. De parameter col_num is yn dit gefal net nedich, om't der gewoan isien kolom yn de boarne array.
WRAPROWS alternatyf foar Excel 365 - 2010
Om de wearden fan in iendiminsjonale array yn rigen yn Excel 2019 en earder te wikkeljen, kinne jo gebrûk meitsje fan de folgjende alternativen foar de funksje WRAPROWS.
Transformearje in rige yn 2D berik:
IFERROR(IF(COLUMN(A1)> n , "", INDEX( row_range , , COLUMN(A1)+(ROW(A1)-1)* n )), "")Feroarje in kolom yn 2D berik:
IFERROR(IF( KOLOM(A1)> n , "", INDEX( kolomberik , KOLOM(A1)+(RIJ(A1)-1)* n ))) , "")Wêr't n it maksimale oantal wearden per rigel is.
Yn ús foarbyldgegevensset brûke wy de folgjende formule om in rigel fan ien rige te konvertearjen (D4) :J4) yn in berik fan trije kolommen. De formule komt telâne yn sel D8, en wurdt dan kopiearre oer 3 kolommen en 3 rigen.
=IFERROR(IF(COLUMN(A1)>3, "", INDEX($D$4:$J$4, , COLUMN(A1)+(ROW(A1)-1)*3)), "")
Om in 1-kolomberik (B4:B20) te feroarjen yn in 5-kolomberik, Fier de ûndersteande formule yn yn D14 en sleep it oer 5 kolommen en 4 rigen.
=IFERROR(IF(COLUMN(A1)>5, "", INDEX($B$4:$B$20, COLUMN(A1)+(ROW(A1)-1)*5)), "")
Yn Excel 365 kinne deselde resultaten berikt wurde mei de lykweardige WRAPCOLS-formules:
=WRAPROWS(D4:J4, 3, "")
en
=WRAPROWS(B4:B20, 5, "")
Hoe't dizze formules wurkje
Yn essinsje wurkje dizze formules lykas yn it foarige foarbyld. It ferskil is yn hoe't jo de rige_nûmer en col_num koördinaten foar de INDEX-funksje bepale:
INDEX($D$4:$J$4,, COLUMN(A1)+(ROW(A1)-1)*3))
Om it kolomnûmer te krijen foar de boppeste lofts sel yn de bestimming berik (D8), jo brûke ditekspresje:
COLUMN(A1)+(ROW(A1)-1)*3)
dat feroaret yn:
1+(1-1)*3
en jout 1.
As resultaat jout de ûndersteande formule de wearde werom fan 'e earste kolom fan' e opjûne array, dat is "Apples":
INDEX($D$4:$J$4,, 1)
Oant no is it resultaat itselde as yn 'e foarige foarbyld. Mar litte wy sjen wat der bart yn oare sellen ...
Yn sel D9 feroarje de relative selferwizings as folget:
INDEX($D$4:$J$4,, COLUMN(A2)+(ROW(A2)-1)*3))
Dat, de formule feroaret yn:
INDEX($D$4:$J$4,, 1+(2-1)*3))
wurdt:
INDEX($D$4:$J$4,, 4))
en jout de wearde werom út de 4e kolom fan de opjûne array, dat is "Cherries" yn G4.
De IF-funksje kontrolearret it kolomnûmer en as it grutter is as it oantal kolommen dat jo opjûn hawwe, jout in lege tekenrige (""), oars it resultaat fan 'e INDEX-funksje:
IF(COLUMN(A1)>3, "", INDEX(…))
As finishing touch foarkomt IFERROR #REF! flaters fan it ferskinen yn "ekstra" sellen as jo de formule kopiearje nei mear sellen dan werklik nedich is.
WRAPCOLS- of WRAPROWS-funksje wurket net
As de "wrap"-funksjes net beskikber binne yn jo Excel of resultearje yn in flater, is it nei alle gedachten ien fan de ûndersteande redenen.
#NAME? flater
Yn Excel 365, in #NAME? flater kin foarkomme omdat jo de namme fan de funksje ferkeard stavere hawwe. Yn oare ferzjes jout it oan dat de funksjes net wurde stipe. As alternatyf kinne jo WRAPCOLS-alternatyf of WRAPROWS-alternatyf brûke.
#VALUE! flater
In #VALUE-flater komt foar as