Innehållsförteckning
Det snabbaste sättet att omvandla en kolumn eller rad med värden till en tvådimensionell matris är att använda funktionen WRAPCOLS eller WRAPROWS.
Excel har sedan Excel grundades varit mycket bra på att beräkna och analysera siffror, men att manipulera matriser har traditionellt sett varit en utmaning. Införandet av dynamiska matriser gjorde användningen av matrisformler mycket enklare. Och nu släpper Microsoft en uppsättning nya dynamiska matrisfunktioner för att manipulera och omforma matriser. I den här handledningen får du lära dig hur du använder två sådana funktioner,WRAPCOLS och WRAPROWS för att omvandla en kolumn eller rad till en 2D-matris på nolltid.
Excel WRAPCOLS-funktionen
Funktionen WRAPCOLS i Excel omvandlar en rad eller kolumn med värden till en tvådimensionell matris baserat på det angivna antalet värden per rad.
Syntaxen har följande argument:
WRAPCOLS(vektor, wrap_count, [pad_with])Var:
- vektor (obligatoriskt) - den endimensionella matrisen eller intervallet som är källan.
- wrap_count (obligatoriskt) - högsta antal värden per kolumn.
- pad_with (valfritt) - det värde som ska fyllas ut i den sista kolumnen om det inte finns tillräckligt många objekt för att fylla den. Om det inte anges fylls de saknade värdena ut med #N/A (standard).
Om du till exempel vill ändra intervallet B5:B24 till en tvådimensionell matris med 5 värden per kolumn är formeln följande:
=WRAPROWS(B5:B24, 5)
Du skriver in formeln i en enskild cell och den sprids automatiskt till så många celler som behövs. I WRAPCOLS-utmatningen ordnas värdena vertikalt, uppifrån och ned, baserat på wrap_count När antalet har uppnåtts startar en ny kolumn.
Excel WRAPROWS-funktionen
Funktionen WRAPROWS i Excel omvandlar en rad eller kolumn med värden till en tvådimensionell matris baserat på det antal värden per rad som du anger.
Syntaxen är följande:
WRAPROWS(vektor, wrap_count, [pad_with])Var:
- vektor (obligatoriskt) - den endimensionella matrisen eller intervallet som är källan.
- wrap_count (obligatoriskt) - högsta antal värden per rad.
- pad_with (valfritt) - det värde som ska fyllas i den sista raden om det inte finns tillräckligt många objekt för att fylla den. Standardvärdet är #N/A.
För att till exempel omvandla intervallet B5:B24 till en 2D-matris med 5 värden i varje rad är formeln:
=WRAPROWS(B5:B24, 5)
Du anger formeln i den övre vänstra cellen i spillområdet, och den fyller alla andra celler automatiskt. Funktionen WRAPROWS ordnar värdena horisontellt, från vänster till höger, baserat på wrap_count När antalet har uppnåtts börjar den en ny rad.
Tillgänglighet för WRAPCOLS och WRAPROWS
Båda funktionerna är endast tillgängliga i Excel för Microsoft 365 (Windows och Mac) och Excel för webben.
I tidigare versioner kan du använda traditionella mer komplexa formler för att utföra omvandlingar från kolumn till array och från rad till array. Längre fram i den här handledningen kommer vi att diskutera de alternativa lösningarna i detalj.
Tips: Om du vill göra en omvänd operation, dvs. ändra en 2D-array till en enda kolumn eller rad, använder du funktionen TOCOL respektive TOROW.
Hur du konverterar kolumn/rad till intervall i Excel - exempel
Nu när du har förstått den grundläggande användningen kan vi titta närmare på några mer specifika fall.
Ange det maximala antalet värden per kolumn eller rad.
Beroende på strukturen på dina ursprungliga data kan det vara lämpligt att ordna om dem i kolumner (WRAPCOLS) eller rader (WRAPROWS). Oavsett vilken funktion du använder är det wrap_count argument som bestämmer det maximala antalet värden i varje kolumn/rad.
Om du till exempel vill omvandla intervallet B4:B23 till en 2D-matris så att varje kolumn har högst 10 värden, använder du den här formeln:
=WRAPCOLS(B4:B23, 10)
För att ordna om samma intervall radvis så att varje rad har högst 4 värden är formeln följande:
=WRAPROWS(B4:B23, 4)
Bilden nedan visar hur det ser ut:
Fyll på saknade värden i den resulterande matrisen
Om det inte finns tillräckligt med värden för att fylla alla kolumner/rader i det resulterande intervallet kommer WRAPROWS och WRAPCOLS att returnera #N/A-fel för att behålla strukturen i 2D-matrisen.
Om du vill ändra standardbeteendet kan du ange ett eget värde för den valfria pad_with argument.
Om du till exempel vill omvandla intervallet B4:B21 till en 2D-array med högst 5 värden, och fylla den sista raden med streck om det inte finns tillräckligt med data för att fylla den, använder du den här formeln:
=WRAPROWS(B4:B21, 5, "-")
För att ersätta de saknade värdena med strängar med noll längd (blanksteg) är formeln följande:
=WRAPROWS(B4:B21, 5, "")
Jämför resultaten med standardbeteendet (formeln i D5) där pad_with utelämnas:
Slå ihop flera rader till ett 2D-område
Om du vill kombinera några separata rader till en enda 2D-array staplar du först raderna horisontellt med hjälp av funktionen HSTACK, och sedan omsluter du värdena med hjälp av WRAPROWS eller WRAPCOLS.
Om du till exempel vill slå ihop värdena från tre rader (B5:J5, B7:G7 och B9:F9) och slå in dem i kolumner som var och en innehåller 10 värden är formeln följande:
=WRAPCOLS(HSTACK(B5:J5, B7:G7, B9:F9), 10)
Om du vill kombinera värden från flera rader till ett 2D-område där varje rad innehåller 5 värden, har formeln följande form:
=WRAPROWS(HSTACK(B5:J5, B7:G7, B9:F9), 5)
Kombinera flera kolumner till en 2D-matris
Om du vill slå ihop flera kolumner till ett 2D-område staplar du dem först vertikalt med hjälp av VSTACK-funktionen, och sedan slår du in värdena i rader (WRAPROWS) eller kolumner (WRAPCOLS).
Om du till exempel vill kombinera värdena från tre kolumner (B5:J5, B7:G7 och B9:F9) till ett 2D-område där varje kolumn innehåller 10 värden, är formeln:
=WRAPCOLS(HSTACK(B5:J5, B7:G7, B9:F9), 10)
Om du vill kombinera samma kolumner till ett 2D-område där varje rad innehåller 5 värden använder du den här formeln:
=WRAPROWS(HSTACK(B5:J5, B7:G7, B9:F9), 5)
Slå in och sortera matrisen
Om källområdet har värden i slumpmässig ordning och du vill att resultatet ska vara sorterat, gör du så här:
- Sortera den ursprungliga matrisen på det sätt du vill med hjälp av funktionen SORT.
- Leverera den sorterade matrisen till WRAPCOLS eller WRAPROWS.
Om du t.ex. vill slå in intervallet B4:B23 i rader med fyra värden i varje och sortera det resulterande intervallet från A till Z, konstruerar du en formel som denna:
=WRAPROWS(SORT(B4:B23), 4)
Om du vill dela in samma intervall i kolumner med 10 värden i varje kolumn och sortera resultatet i alfabetisk ordning är formeln följande:
=WRAPCOLS(SORT(B4:B23), 10)
Resultaten ser ut på följande sätt:
Tips: För att ordna värdena i den resulterande matrisen i fallande ordning , ange det tredje argumentet ( sort_order ) i SORT-funktionen till -1.
WRAPCOLS alternativ för Excel 365 - 2010
I äldre Excel-versioner där funktionen WRAPCOLS inte stöds kan du skapa en egen formel för att slå in värdena från en endimensionell matris i kolumner. Detta kan göras genom att använda fem olika funktioner tillsammans.
WRAPCOLS alternativ för att konvertera en rad till ett 2D-område:
IFERROR(IF(ROW(A1)> n , "", INDEX( row_range , , , RAD(A1) + (KOLUMN(A1)-1)* n )), "")WRAPCOLS alternativ för att konvertera en kolumn till ett 2D-område:
IFERROR(IF(ROW(A1)> n , "", INDEX( kolumn_intervall , RAD(A1) + (KOLUMN(A1)-1)* n )), "")Var n är det maximala antalet värden per kolumn.
I bilden nedan använder vi följande formel för att omvandla ett intervall med en rad (D4:J4) till en matris med tre rader.
=IFERROR(IF(ROW(A1)>3, "", INDEX($D$4:$J$4, , ROW(A1) + (COLUMN(A1)-1)*3)), "")
Den här formeln ändrar ett intervall med en kolumn (B4:B20) till en matris med fem rader:
=IFERROR(IF(ROW(A1)>5, "", INDEX($B$4:$B$20, ROW(A1) + (COLUMN(A1)-1)*5)), "")
Ovanstående lösningar är likvärdiga med de analoga WRAPCOLS-formlerna och ger samma resultat:
=WRAPCOLS(D4:J4, 3, "")
och
=WRAPCOLS(B4:B20, 5, "")
Kom ihåg att till skillnad från WRAPCOLS-funktionen för dynamiska matriser följer de traditionella formlerna metoden med en formel och en cell. Vår första formel anges i D8 och kopieras 3 rader ner och 3 kolumner till höger. Den andra formeln anges i D14 och kopieras 5 rader ner och 4 kolumner till höger.
Hur dessa formler fungerar
I båda formlerna använder vi funktionen INDEX som returnerar ett värde från den medföljande matrisen baserat på ett rad- och kolumnnummer:
INDEX(array, row_num, [column_num])Eftersom det rör sig om en array med en rad kan vi utelämna row_num argumentet, så den är som standard 1. Tricket är att ha col_num beräknas automatiskt för varje cell där formeln kopieras. Så här gör vi:
RAD(A1)+(KOLUMN(A1)-1)*3)
ROW-funktionen returnerar radnumret för A1-referensen, vilket är 1.
Funktionen COLUMN returnerar kolumnnumret för A1-referensen, som också är 1. Om du subtraherar 1 blir det noll, och om du multiplicerar 0 med 3 blir det 0.
Sedan adderar du 1 som returneras av ROW och 0 som returneras av COLUMN och får 1 som resultat.
På så sätt omvandlas INDEX-formeln i den övre vänstra cellen i målområdet (D8):
INDEX($D$4:$J$4, ,ROW(A1) + (COLUMN(A1)-1)*3)))
ändringar av
INDEX($D$4:$J$4, ,1)
och returnerar värdet från den första kolumnen i den angivna matrisen, vilket är "Apples" i D4.
När formeln kopieras till cell D9 ändras de relativa cellreferenserna baserat på en relativ position för rader och kolumner medan den absoluta intervallreferensen förblir oförändrad:
INDEX($D$4:$J$4,, RAD(A2)+(KOLUMN(A2)-1)*3)))
förvandlas till:
INDEX($D$4:$J$4,, 2+(1-1)*3)))
blir:
INDEX($D$4:$J$4,, 2))
och returnerar värdet från den andra kolumnen i den angivna matrisen, vilket är "Apricots" i E4.
IF-funktionen kontrollerar radnumret och om det är större än det antal rader du angett (3 i vårt fall) returnerar den en tom sträng (""), annars resultatet av INDEX-funktionen:
IF(ROW(A1)>3, "", INDEX(....))
Slutligen åtgärdar IFERROR-funktionen ett #REF!-fel som uppstår när formeln kopieras till fler celler än vad som egentligen behövs.
Den andra formeln som omvandlar en kolumn till ett 2D-område fungerar på samma sätt. Skillnaden är att du använder kombinationen ROW + COLUMN för att räkna ut row_num argument för INDEX. col_num behövs inte i det här fallet eftersom det bara finns en kolumn i källmatrisen.
WRAPROWS alternativ för Excel 365 - 2010
Om du vill slå in värdena från en endimensionell matris i rader i Excel 2019 och tidigare kan du använda följande alternativ till funktionen WRAPROWS.
Omvandla en rad till ett 2D-område:
IFERROR(IF(COLUMN(A1)> n , "", INDEX( row_range , , , KOLUMN(A1)+(RAD(A1)-1)* n )), "")Ändra en kolumn till ett 2D-område:
IFERROR(IF(COLUMN(A1)> n , "", INDEX( kolumn_intervall , KOLUMN(A1)+(RAD(A1)-1)* n )), "")Var n är det maximala antalet värden per rad.
I vårt exempel använder vi följande formel för att konvertera ett intervall med en rad (D4:J4) till ett intervall med tre kolumner. Formeln hamnar i cell D8 och kopieras sedan över tre kolumner och tre rader.
=IFERROR(IF(COLUMN(A1)>3, "", INDEX($D$4:$J$4, , COLUMN(A1)+(ROW(A1)-1)*3)), "")
Om du vill omvandla ett intervall med en kolumn (B4:B20) till ett intervall med fem kolumner skriver du nedanstående formel i D14 och drar den över fem kolumner och fyra rader.
=IFERROR(IF(COLUMN(A1)>5, "", INDEX($B$4:$B$20, COLUMN(A1)+(ROW(A1)-1)*5)), "")
I Excel 365 kan samma resultat uppnås med motsvarande WRAPCOLSformler:
=WRAPROWS(D4:J4, 3, "")
och
=WRAPROWS(B4:B20, 5, "")
Hur dessa formler fungerar
I princip fungerar dessa formler som i det föregående exemplet. Skillnaden är hur du bestämmer row_num och col_num koordinater för INDEX-funktionen:
INDEX($D$4:$J$4,, KOLUMN(A1)+(RAD(A1)-1)*3)))
För att få fram kolumnnumret för den övre vänstra cellen i målområdet (D8) använder du det här uttrycket:
KOLUMN(A1)+(RAD(A1)-1)*3)
som ändras till:
1+(1-1)*3
och ger 1.
Som ett resultat av detta returnerar formeln nedan värdet från den första kolumnen i den angivna matrisen, vilket är "Apples":
INDEX($D$4:$J$4,, 1)
Än så länge är resultatet detsamma som i det föregående exemplet, men låt oss se vad som händer i andra celler...
I cell D9 ändras de relativa cellreferenserna på följande sätt:
INDEX($D$4:$J$4,, KOLUMN(A2)+(RAD(A2)-1)*3)))
Formeln omvandlas alltså till:
INDEX($D$4:$J$4,, 1+(2-1)*3)))
blir:
INDEX($D$4:$J$4,, 4))
och returnerar värdet från den fjärde kolumnen i den angivna matrisen, vilket är "Cherries" i G4.
IF-funktionen kontrollerar kolumnnumret och om det är större än det antal kolumner som du har angett returnerar den en tom sträng (""), annars resultatet av INDEX-funktionen:
IF(COLUMN(A1)>3, "", INDEX(....))
IFERROR förhindrar dessutom att #REF!-fel dyker upp i "extra" celler om du kopierar formeln till fler celler än vad som egentligen behövs.
Funktionen WRAPCOLS eller WRAPROWS fungerar inte
Om "wrap"-funktionerna inte är tillgängliga i Excel eller om det uppstår ett fel är det troligen en av följande orsaker.
#NAME? fel
I Excel 365 kan felet #NAME? uppstå eftersom du har stavat fel på funktionens namn. I andra versioner indikerar det att funktionerna inte stöds. Som en lösning kan du använda WRAPCOLS alternativ eller WRAPROWS alternativ.
#VALUE! fel
Ett #VALUE-fel uppstår om vektor argumentet inte är en endimensionell matris.
#NUM! fel
Ett #NUM-fel uppstår om wrap_count värdet är 0 eller ett negativt tal.
#SPILL! fel
Oftast visar felet #SPILL att det inte finns tillräckligt många tomma celler att spilla resultaten i. Rensa de angränsande cellerna så försvinner felet. Om felet kvarstår kan du läsa om vad #SPILL betyder i Excel och hur du åtgärdar det.
Så här använder du funktionerna WRAPCOLS och WRAPROWS för att omvandla ett endimensionellt intervall till en tvådimensionell matris i Excel. Tack för att du läste och hoppas att vi ses på vår blogg nästa vecka!
Arbetsbok för övning för nedladdning
Funktionerna WRAPCOLS och WRAPROWS - exempel (.xlsx-fil)