Indholdsfortegnelse
Den hurtigste måde at omdanne en kolonne eller række af værdier til et todimensionelt array er ved hjælp af WRAPCOLS eller WRAPROWS-funktionen.
Siden Excel's tidligste dage har det været meget godt til at beregne og analysere tal. Men det har traditionelt været en udfordring at manipulere arrays. Indførelsen af dynamiske arrays gjorde brugen af arrayformler meget nemmere. Og nu frigiver Microsoft et sæt nye dynamiske array-funktioner til at manipulere og omforme arrays. I denne vejledning lærer du, hvordan du bruger to sådanne funktioner,WRAPCOLS og WRAPROWS for at omdanne en kolonne eller række til et 2D-array på ingen tid.
Excel WRAPCOLS-funktionen
Funktionen WRAPCOLS i Excel omdanner en række eller kolonne af værdier til et todimensionelt array baseret på det angivne antal værdier pr. række.
Syntaksen har følgende argumenter:
WRAPCOLS(vektor, wrap_count, [pad_with])Hvor:
- vektor (påkrævet) - det endimensionale array eller område, som er kilden.
- wrap_count (påkrævet) - det maksimale antal værdier pr. kolonne.
- pad_with (valgfrit) - den værdi, der skal udfyldes i den sidste kolonne, hvis der ikke er tilstrækkeligt mange elementer til at udfylde den. Hvis den udelades, udfyldes de manglende værdier med #N/A (standard).
Hvis du f.eks. vil ændre området B5:B24 til et 2-dimensionelt array med 5 værdier pr. kolonne, er formlen:
=WRAPROWS(B5:B24, 5)
Du indtaster formlen i en hvilken som helst celle, og den bliver automatisk spredt ud i så mange celler som nødvendigt. I WRAPCOLS-uddatoen er værdierne arrangeret lodret fra top til bund, baseret på wrap_count Når tallet er nået, startes en ny kolonne.
Excel WRAPROWS-funktionen
Funktionen WRAPROWS i Excel konverterer en række eller kolonne af værdier til et todimensionelt array baseret på det antal værdier pr. række, som du angiver.
Syntaksen er som følger:
WRAPROWS(vektor, wrap_count, [pad_with])Hvor:
- vektor (påkrævet) - det endimensionale array eller område, som er kilden.
- wrap_count (påkrævet) - det maksimale antal værdier pr. række.
- pad_with (valgfrit) - den værdi, der skal udfyldes med den sidste række, hvis der ikke er tilstrækkeligt mange elementer til at fylde den. Standardværdien er #N/A.
For at omdanne området B5:B24 til et 2D-array med 5 værdier i hver række er formlen f.eks:
=WRAPROWS(B5:B24, 5)
Du indtaster formlen i den øverste venstre celle i spildområdet, og den udfylder automatisk alle andre celler. Funktionen WRAPROWS arrangerer værdierne horisontalt fra venstre mod højre på grundlag af wrap_count Når tallet er nået, starter den en ny række.
Tilgængelighed af WRAPCOLS og WRAPROWS
Begge funktioner er kun tilgængelige i Excel til Microsoft 365 (Windows og Mac) og Excel til internettet.
I tidligere versioner kan du bruge traditionelle, mere komplekse formler til at udføre transformationer fra kolonne til array og fra række til array. Længere fremme i denne vejledning vil vi diskutere de alternative løsninger i detaljer.
Tip. Hvis du vil udføre en omvendt operation, dvs. ændre et 2D-array til en enkelt kolonne eller række, skal du bruge henholdsvis funktionen TOCOL eller TOROW.
Sådan konverteres kolonne / række til område i Excel - eksempler
Nu hvor du har fået en forståelse for den grundlæggende brug, kan vi se nærmere på nogle mere specifikke tilfælde.
Indstil det maksimale antal værdier pr. kolonne eller række
Afhængigt af strukturen af dine oprindelige data kan du finde det passende at omarrangere dem i kolonner (WRAPCOLS) eller rækker (WRAPROWS). Uanset hvilken funktion du bruger, er det den wrap_count argument, der bestemmer det maksimale antal værdier i hver kolonne/række.
Hvis du f.eks. vil omdanne området B4:B23 til et 2D-array, så hver kolonne har højst 10 værdier, skal du bruge denne formel:
=WRAPCOLS(B4:B23, 10)
For at omarrangere det samme område efter række, så hver række har højst 4 værdier, er formlen:
=WRAPROWS(B4:B23, 4)
Billedet nedenfor viser, hvordan det ser ud:
Udfyld manglende værdier i det resulterende array
Hvis der ikke er nok værdier til at fylde alle kolonnerne/rækkerne i det resulterende område, returnerer WRAPROWS og WRAPCOLS #N/A-fejl for at bevare strukturen i 2D-arrayet.
Hvis du vil ændre standardadfærden, kan du angive en brugerdefineret værdi for den valgfrie pad_with argument.
Hvis du f.eks. vil omdanne området B4:B21 til et 2D-array med højst 5 værdier i bredden og udfylde den sidste række med streger, hvis der ikke er nok data til at fylde den, skal du bruge denne formel:
=WRAPROWS(B4:B21, 5, "-")
For at erstatte de manglende værdier med strenge af nul længde (blanktegn) er formlen:
=WRAPROWS(B4:B21, 5, "")
Sammenlign venligst resultaterne med standardadfærden (formlen i D5), hvor pad_with er udeladt:
Flette flere rækker til et 2D-område
Hvis du vil kombinere et par separate rækker til et enkelt 2D-array, skal du først stable rækkerne horisontalt ved hjælp af funktionen HSTACK og derefter ombryde værdierne ved hjælp af WRAPROWS eller WRAPCOLS.
For eksempel, for at flette værdierne fra 3 rækker (B5:J5, B7:G7 og B9:F9) og pakke dem ind i kolonner, der hver indeholder 10 værdier, er formlen:
=WRAPCOLS(HSTACK(B5:J5, B7:G7, B9:F9), 10)
Hvis du vil kombinere værdier fra flere rækker i et 2D-område, hvor hver række indeholder 5 værdier, skal formlen have denne form:
=WRAPROWS(HSTACK(B5:J5, B7:G7, B9:F9), 5)
Kombiner flere kolonner til et 2D-array
Hvis du vil samle flere kolonner i et 2D-område, skal du først stable dem vertikalt ved hjælp af VSTACK-funktionen og derefter pakke værdierne ind i rækker (WRAPROWS) eller kolonner (WRAPCOLS).
Hvis du f.eks. vil kombinere værdierne fra 3 kolonner (B5:J5, B7:G7 og B9:F9) til et 2D-område, hvor hver kolonne indeholder 10 værdier, er formlen:
=WRAPCOLS(HSTACK(B5:J5, B7:G7, B9:F9), 10)
Hvis du vil kombinere de samme kolonner til et 2D-område, hvor hver række indeholder 5 værdier, skal du bruge denne formel:
=WRAPROWS(HSTACK(B5:J5, B7:G7, B9:F9), 5)
Indpakning og sortering af arrayet
I situationer, hvor kildeområdet har værdier i tilfældig rækkefølge, mens du ønsker, at output skal være sorteret, skal du gå frem på denne måde:
- Sorter det oprindelige array på den måde, du ønsker, ved hjælp af funktionen SORT.
- Leverer det sorterede array til WRAPCOLS eller WRAPROWS.
Hvis du f.eks. vil pakke området B4:B23 ind i rækker med 4 værdier i hver række og sortere det resulterende område fra A til Z, skal du konstruere en formel som denne:
=WRAPROWS(SORT(B4:B23), 4)
Hvis du vil pakke det samme område ind i kolonner med 10 værdier i hver og sortere output alfabetisk, er formlen:
=WRAPCOLS(SORT(B4:B23), 10)
Resultaterne ser ud som følger:
Tip. Hvis du vil arrangere værdierne i det resulterende array i faldende rækkefølge , indstille det tredje argument ( sort_order ) i SORT-funktionen til -1.
WRAPCOLS alternativ til Excel 365 - 2010
I ældre Excel-versioner, hvor funktionen WRAPCOLS ikke understøttes, kan du lave din egen formel til at pakke værdierne fra et endimensionelt array ind i kolonner. Dette kan gøres ved at bruge 5 forskellige funktioner sammen.
WRAPCOLS alternativ til at konvertere en række til et 2D-interval:
IFERROR(IF(ROW(A1)> n , "", INDEX( row_range , , , RÆKKE(A1) + (KOLONNE(A1)-1)* n )), "")WRAPCOLS alternativ til at konvertere en kolonne til et 2D-område:
IFERROR(IF(ROW(A1)> n , "", INDEX( kolonne_række , RÆKKE(A1) + (KOLONNE(A1)-1)*) n )), "")Hvor n er det maksimale antal værdier pr. kolonne.
I billedet nedenfor bruger vi følgende formel til at omdanne et område med én række (D4:J4) til et array med tre rækker.
=IFERROR(IF(ROW(A1)>3, "", INDEX($D$4:$J$4, , ROW(A1) + (COLUMN(A1)-1)*3)), "")
Og denne formel ændrer et område med én kolonne (B4:B20) til et array med fem rækker:
=IFERROR(IF(ROW(A1)>5, "", INDEX($B$4:$B$20, ROW(A1) + (COLUMN(A1)-1)*5)), "")
Ovenstående løsninger er en efterligning af de tilsvarende WRAPCOLS formler og giver de samme resultater:
=WRAPCOLS(D4:J4, 3, "")
og
=WRAPCOLS(B4:B20, 5, "")
Husk, at i modsætning til WRAPCOLS-funktionen til dynamiske array'er følger de traditionelle formler metoden med én formel - én celle. Vores første formel indtastes i D8 og kopieres 3 rækker ned og 3 kolonner til højre. Den anden formel indtastes i D14 og kopieres 5 rækker ned og 4 kolonner til højre.
Sådan fungerer disse formler
I begge formler bruger vi INDEX-funktionen, som returnerer en værdi fra det angivne array baseret på et række- og kolonnetal:
INDEX(array, row_num, [column_num])Da vi har at gøre med et array med én række, kan vi udelade row_num argumentet, så det er standardværdien 1. Tricket er at have col_num beregnes automatisk for hver celle, hvor formlen er kopieret. Og sådan gør vi det:
RÆKKE(A1)+(KOLONNE(A1)-1)*3)
Funktionen ROW returnerer række-nummeret for A1-referencen, som er 1.
Funktionen COLUMN returnerer kolonnenummeret for A1-referencen, som også er 1. Hvis man trækker 1 fra, bliver det til nul, og hvis man ganger 0 med 3, får man 0.
Derefter lægger du 1, der returneres af ROW, og 0, der returneres af COLUMN, sammen og får 1 som resultat.
På denne måde gennemgår INDEX-formlen i den øverste venstre celle i destinationsområdet (D8) denne transformation:
INDEX($D$4:$J$4, ,ROW(A1) + (COLUMN(A1)-1)*3)))
ændringer til
INDEX($D$4:$J$4, ,1)
og returnerer værdien fra den første kolonne i det angivne array, som er "Apples" i D4.
Når formlen kopieres til celle D9, ændres de relative cellehenvisninger baseret på en relativ placering af rækker og kolonner, mens den absolutte områdehenvisning forbliver uændret:
INDEX($D$4:$J$4,, RÆKKE(A2)+(KOLONNE(A2)-1)*3)))
bliver til:
INDEX($D$4:$J$4,, 2+(1-1)*3)))
bliver:
INDEX($D$4:$J$4,,, 2)))
og returnerer værdien fra den anden kolonne i det angivne array, som er "Abrikoser" i E4.
IF-funktionen kontrollerer rækkeantallet, og hvis det er større end det antal rækker, du har angivet (3 i vores tilfælde), returnerer den en tom streng (""), ellers er det resultatet af INDEX-funktionen:
IF(ROW(A1)>3, "", INDEX(....))
Endelig løser IFERROR-funktionen en #REF!-fejl, der opstår, når formlen kopieres til flere celler, end der egentlig er brug for.
Den anden formel, der konverterer en kolonne til et 2D-interval, fungerer med samme logik. Forskellen er, at du bruger kombinationen ROW + COLUMN til at finde ud af row_num argument for INDEX. col_num parameteren er ikke nødvendig i dette tilfælde, da der kun er én kolonne i kildematrixen.
WRAPROWS alternativ til Excel 365 - 2010
Hvis du vil pakke værdierne fra et endimensionelt array ind i rækker i Excel 2019 og tidligere, kan du bruge følgende alternativer til funktionen WRAPROWS.
Omdanne en række til et 2D-område:
IFERROR(IF(COLUMN(A1)> n , "", INDEX( row_range , , , KOLONNE(A1)+(RÆKKE(A1)-1)* n )), "")Ændre en kolonne til et 2D-interval:
IFERROR(IF(COLUMN(A1)> n , "", INDEX( kolonne_række , KOLONNE(A1)+(RÆKKE(A1)-1)* n )), "")Hvor n er det maksimale antal værdier pr. række.
I vores eksempeldatasæt bruger vi følgende formel til at konvertere et område med én række (D4:J4) til et område med tre kolonner. Formlen lander i celle D8 og kopieres derefter på tværs af 3 kolonner og 3 rækker.
=IFERROR(IF(COLUMN(A1)>3, "", INDEX($D$4:$J$4, , COLUMN(A1)+(ROW(A1)-1)*3)), "")
Hvis du vil omdanne et område med 1 kolonne (B4:B20) til et område med 5 kolonner, skal du indtaste nedenstående formel i D14 og trække den over 5 kolonner og 4 rækker.
=IFERROR(IF(COLUMN(A1)>5, "", INDEX($B$4:$B$20, COLUMN(A1)+(ROW(A1)-1)*5)), "")
I Excel 365 kan de samme resultater opnås med de tilsvarende WRAPCOLS-formler:
=WRAPROWS(D4:J4, 3, "")
og
=WRAPROWS(B4:B20, 5, "")
Sådan fungerer disse formler
Disse formler fungerer i princippet som i det foregående eksempel. Forskellen er, hvordan du bestemmer row_num og col_num koordinater for INDEX-funktionen:
INDEX($D$4:$J$4,, KOLONNE(A1)+(RÆKKE(A1)-1)*3)))
For at få kolonnenummeret for den øverste venstre celle i destinationsområdet (D8) bruger du dette udtryk:
KOLONNE(A1)+(RÆKKE(A1)-1)*3)
der ændres til:
1+(1-1)*3
og giver 1.
Resultatet er, at nedenstående formel returnerer værdien fra den første kolonne i det angivne array, som er "Apples":
INDEX($D$4:$J$4,,, 1)
Indtil videre er resultatet det samme som i det foregående eksempel. Men lad os se, hvad der sker i andre celler...
I celle D9 ændres de relative cellehenvisninger som følger:
INDEX($D$4:$J$4,, KOLONNE(A2)+(RÆKKE(A2)-1)*3)))
Så formlen bliver til:
INDEX($D$4:$J$4,, 1+(2-1)*3)))
bliver:
INDEX($D$4:$J$4,,, 4))
og returnerer værdien fra den fjerde kolonne i det angivne array, som er "Cherries" i G4.
IF-funktionen kontrollerer kolonnenummeret, og hvis det er større end det antal kolonner, du har angivet, returnerer den en tom streng (""), ellers resultatet af INDEX-funktionen:
IF(COLUMN(A1)>3, "", INDEX(....))
Som en sidste detalje forhindrer IFERROR, at der opstår #REF! fejl i "ekstra" celler, hvis du kopierer formlen til flere celler end nødvendigt.
Funktionen WRAPCOLS eller WRAPROWS fungerer ikke
Hvis "wrap"-funktionerne ikke er tilgængelige i din Excel eller resulterer i en fejl, er det højst sandsynligt en af nedenstående årsager.
#NAME? fejl
I Excel 365 kan der opstå en #NAME? fejl, fordi du har stavet funktionens navn forkert. I andre versioner indikerer det, at funktionerne ikke understøttes. Som en løsning kan du bruge WRAPCOLS alternativt eller WRAPROWS alternativt.
#VALUE! fejl
Der opstår en #VALUE-fejl, hvis vektor argumentet ikke er et endimensionalt array.
#NUM! fejl
Der opstår en #NUM-fejl, hvis wrap_count værdien er 0 eller et negativt tal.
#SPILL! fejl
Oftest indikerer en #SPILL-fejl, at der ikke er nok tomme celler til at spilde resultaterne i. Ryd de tilstødende celler, og så er fejlen væk. Hvis fejlen fortsætter, kan du læse, hvad #SPILL betyder i Excel, og hvordan du løser den.
Sådan bruger du funktionerne WRAPCOLS og WRAPROWS til at konvertere et endimensionelt område til et todimensionelt array i Excel. Tak for din læsning og håber at se dig på vores blog i næste uge!
Arbejdsbog til download
WRAPCOLS og WRAPROWS funktioner - eksempler (.xlsx-fil)