Конвертиране на колона / ред в масив в Excel: функции WRAPCOLS &; WRAPROWS

  • Споделя Това
Michael Brown

Най-бързият начин за трансформиране на колона или ред от стойности в двумерен масив е чрез функцията WRAPCOLS или WRAPROWS.

Още от първите дни на Excel той е много добър в изчисляването и анализирането на числа. Но манипулирането на масиви традиционно е предизвикателство. Въвеждането на динамичните масиви направи използването на формули за масиви много по-лесно. А сега Microsoft пуска набор от нови функции за динамични масиви, които манипулират и преоформят масиви. Този урок ще ви научи как да използвате две такива функции,WRAPCOLS и WRAPROWS, за да превърнете колона или ред в 2D масив за нула време.

    Функция WRAPCOLS на Excel

    Функцията WRAPCOLS в Excel трансформира ред или колона от стойности в двумерен масив въз основа на зададения брой стойности на ред.

    Синтаксисът има следните аргументи:

    WRAPCOLS(вектор, wrap_count, [pad_with])

    Къде:

    • вектор (задължително) - изходният едноизмерен масив или обхват.
    • wrap_count (задължително) - максималният брой стойности в колона.
    • pad_with (по избор) - стойността, която да се попълни в последната колона, ако няма достатъчно елементи за запълването ѝ. Ако се пропусне, липсващите стойности ще бъдат попълнени с #N/A (по подразбиране).

    Например, за да промените диапазона B5:B24 в двумерен масив с по 5 стойности в колона, формулата е:

    =WRAPROWS(B5:B24, 5)

    Въвеждате формулата във всяка отделна клетка и тя автоматично се разпространява в толкова клетки, колкото е необходимо. В изхода WRAPCOLS стойностите се подреждат вертикално, отгоре надолу, въз основа на wrap_count След достигане на броя се стартира нова колона.

    Функция WRAPROWS на Excel

    Функцията WRAPROWS в Excel преобразува ред или колона от стойности в двумерен масив въз основа на зададения от вас брой стойности на ред.

    Синтаксисът е следният:

    WRAPROWS(вектор, wrap_count, [pad_with])

    Къде:

    • вектор (задължително) - изходният едноизмерен масив или обхват.
    • wrap_count (задължително) - максималният брой стойности на ред.
    • pad_with (незадължително) - стойността, с която да се попълни последният ред, ако няма достатъчно елементи за запълването му. По подразбиране е #N/A.

    Например, за да трансформирате диапазона B5:B24 в 2D масив с 5 стойности на всеки ред, формулата е:

    =WRAPROWS(B5:B24, 5)

    Въвеждате формулата в горната лява клетка на диапазона на разливане и тя автоматично попълва всички останали клетки. Функцията WRAPROWS подрежда стойностите хоризонтално, от ляво на дясно, въз основа на wrap_count След достигане на броя започва нов ред.

    Наличност на WRAPCOLS и WRAPROWS

    И двете функции са налични само в Excel за Microsoft 365 (Windows и Mac) и Excel за уеб.

    В по-ранните версии можете да използвате традиционни по-сложни формули, за да извършвате трансформации от колона към масив и от ред към масив. По-нататък в този урок ще разгледаме подробно алтернативните решения.

    Съвет. За да извършите обратна операция, т.е. да промените 2D масив в една колона или ред, използвайте съответно функцията TOCOL или TOROW.

    Как да конвертирате колона / ред в диапазон в Excel - примери

    След като вече сте наясно с основните начини на използване, нека разгледаме по-подробно няколко по-специфични случая.

    Задаване на максималния брой стойности в колона или ред

    В зависимост от структурата на първоначалните ви данни може да се окаже подходящо те да бъдат пренаредени в колони (WRAPCOLS) или редове (WRAPROWS). Която и функция да използвате, тя е wrap_count аргумент, който определя максималния брой стойности във всяка колона/ред.

    Например, за да трансформирате диапазона B4:B23 в двуизмерен масив, така че всяка колона да има максимум 10 стойности, използвайте тази формула:

    =WRAPCOLS(B4:B23, 10)

    За да пренаредите същия диапазон по редове, така че всеки ред да има максимум 4 стойности, формулата е:

    =WRAPROWS(B4:B23, 4)

    Изображението по-долу показва как изглежда това:

    Попълване на липсващите стойности в получения масив

    В случай че няма достатъчно стойности за запълване на всички колони/редове на получения диапазон, WRAPROWS и WRAPCOLS ще върнат грешки #N/A, за да се запази структурата на 2D масива.

    За да промените поведението по подразбиране, можете да зададете потребителска стойност за опцията pad_with аргумент.

    Например, за да трансформирате диапазона B4:B21 в двуизмерен масив с максимална ширина 5 стойности и да запълните последния ред с тирета, ако няма достатъчно данни за запълването му, използвайте тази формула:

    =WRAPROWS(B4:B21, 5, "-")

    За да замените липсващите стойности с низове с нулева дължина (празни места), формулата е:

    =WRAPROWS(B4:B21, 5, "")

    Моля, сравнете резултатите с поведението по подразбиране (формулата в D5), където pad_with се пропуска:

    Сливане на няколко реда в 2D диапазон

    За да комбинирате няколко отделни реда в един двуизмерен масив, първо подредете редовете хоризонтално с функцията HSTACK, а след това увийте стойностите с помощта на WRAPROWS или WRAPCOLS.

    Например, за да обедините стойностите от 3 реда (B5:J5, B7:G7 и B9:F9) и да ги превърнете в колони, всяка от които съдържа 10 стойности, формулата е:

    =WRAPCOLS(HSTACK(B5:J5, B7:G7, B9:F9), 10)

    За да комбинирате стойности от няколко реда в 2D диапазон, където всеки ред съдържа 5 стойности, формулата е в този вид:

    =WRAPROWS(HSTACK(B5:J5, B7:G7, B9:F9), 5)

    Комбиниране на няколко колони в 2D масив

    За да обедините няколко колони в двуизмерен диапазон, първо ги подредете вертикално с помощта на функцията VSTACK, а след това увийте стойностите в редове (WRAPROWS) или колони (WRAPCOLS).

    Например, за да комбинирате стойностите от 3 колони (B5:J5, B7:G7 и B9:F9) в 2D диапазон, където всяка колона съдържа 10 стойности, формулата е:

    =WRAPCOLS(HSTACK(B5:J5, B7:G7, B9:F9), 10)

    За да комбинирате същите колони в двуизмерен диапазон, в който всеки ред съдържа 5 стойности, използвайте тази формула:

    =WRAPROWS(HSTACK(B5:J5, B7:G7, B9:F9), 5)

    Опаковане и сортиране на масива

    В случаите, когато в изходния диапазон има стойности в произволен ред, а желаете изходът да бъде сортиран, процедирайте по този начин:

    1. Сортирайте първоначалния масив по желания начин с помощта на функцията SORT.
    2. Подайте сортирания масив към WRAPCOLS или WRAPROWS.

    Например, за да обхванете диапазона B4:B23 в редове с по 4 стойности във всеки и да сортирате получения диапазон от A до Z, съставете следната формула:

    =WRAPROWS(SORT(B4:B23), 4)

    Формулата е следната: Същият диапазон се разделя на колони с по 10 стойности във всяка и изходът се подрежда по азбучен ред:

    =WRAPCOLS(SORT(B4:B23), 10)

    Резултатите изглеждат по следния начин:

    Съвет. За да подредите стойностите в получения масив в низходящ ред , задайте третия аргумент ( sort_order ) на функцията SORT на -1.

    Алтернатива на WRAPCOLS за Excel 365 - 2010

    В по-старите версии на Excel, където функцията WRAPCOLS не се поддържа, можете да създадете своя собствена формула за опаковане на стойностите от едноизмерен масив в колони. Това може да стане, като използвате заедно 5 различни функции.

    Алтернатива WRAPCOLS за преобразуване на ред в 2D диапазон:

    IFERROR(IF(ROW(A1)> n , "", INDEX( row_range , , РЕД(А1) + (КОЛОНА(А1)-1)* n )), "")

    Алтернатива WRAPCOLS за преобразуване на колона в 2D диапазон:

    IFERROR(IF(ROW(A1)> n , "", INDEX( column_range , РЕД(A1) + (КОЛОНА(A1)-1)* n )), "")

    Къде: n е максималният брой стойности в колона.

    На изображението по-долу използваме следната формула, за да превърнем едноредов диапазон (D4:J4) в триредов масив.

    =IFERROR(IF(ROW(A1)>3, "", INDEX($D$4:$J$4, , ROW(A1) + (COLUMN(A1)-1)*3)), "")

    А тази формула променя диапазон от една колона (B4:B20) в масив от пет реда:

    =IFERROR(IF(ROW(A1)>5, "", INDEX($B$4:$B$20, ROW(A1) + (COLUMN(A1)-1)*5), "")

    Горепосочените решения имитират аналогичните формули на WRAPCOLS и дават същите резултати:

    =WRAPCOLS(D4:J4, 3, "")

    и

    =WRAPCOLS(B4:B20, 5, "")

    Имайте предвид, че за разлика от функцията WRAPCOLS за динамични масиви, традиционните формули следват подхода "една формула - една клетка". И така, нашата първа формула е въведена в D8 и е копирана 3 реда надолу и 3 колони надясно. Втората формула е въведена в D14 и е копирана 5 реда надолу и 4 колони надясно.

    Как работят тези формули

    И в двете формули се използва функцията INDEX, която връща стойност от предоставения масив въз основа на номер на ред и колона:

    INDEX(array, row_num, [column_num])

    Тъй като става въпрос за едноредов масив, можем да пропуснем row_num аргумент, така че по подразбиране той е 1. col_num Изчислява се автоматично за всяка клетка, в която е копирана формулата. Ето как да направим това:

    РЕД(A1)+(КОЛОНА(A1)-1)*3)

    Функцията ROW връща номера на реда на препратката A1, който е 1.

    Функцията COLUMN връща номера на колоната на препратката A1, който също е 1. Изваждането на 1 го превръща в нула, а умножаването на 0 по 3 дава 0.

    След това събирате 1, върнат от ROW, и 0, върнат от COLUMN, и получавате 1 като резултат.

    По този начин формулата INDEX в горната лява клетка на целевия диапазон (D8) се подлага на тази трансформация:

    INDEX($D$4:$J$4, ,ROW(A1) + (COLUMN(A1)-1)*3))

    промени в

    INDEX($D$4:$J$4, ,1)

    и връща стойността от първата колона на посочения масив, която е "Ябълки" в D4.

    Когато формулата се копира в клетка D9, относителните препратки към клетките се променят въз основа на относителната позиция на редовете и колоните, докато абсолютната препратка към обхвата остава непроменена:

    INDEX($D$4:$J$4,, ROW(A2)+(COLUMN(A2)-1)*3))

    се превръща в:

    INDEX($D$4:$J$4,, 2+(1-1)*3))

    става:

    INDEX($D$4:$J$4,, 2))

    и връща стойността от втората колона на посочения масив, която е "Кайсии" в E4.

    Функцията IF проверява номера на реда и ако той е по-голям от зададения брой редове (3 в нашия случай), връща празен низ (""), в противен случай - резултата от функцията INDEX:

    IF(ROW(A1)>3, "", INDEX(...))

    И накрая, функцията IFERROR отстранява грешка #REF!, която се появява, когато формулата се копира в повече клетки, отколкото е необходимо.

    Втората формула, която преобразува колона в 2D диапазон, работи със същата логика. Разликата е, че използвате комбинацията ROW + COLUMN, за да разберете row_num аргумент за INDEX. col_num В този случай не е необходим параметър, тъй като в изходния масив има само една колона.

    Алтернатива на WRAPROWS за Excel 365 - 2010

    За да опаковате стойностите от едномерен масив в редове в Excel 2019 и по-ранни версии, можете да използвате следните алтернативи на функцията WRAPROWS.

    Преобразуване на ред в 2D диапазон:

    IFERROR(IF(COLUMN(A1)> n , "", INDEX( row_range , , КОЛОНА(A1)+(РЕД(A1)-1)* n )), "")

    Промяна на колона в 2D диапазон:

    IFERROR(IF(COLUMN(A1)> n , "", INDEX( column_range , КОЛОНА(A1)+(РЕД(A1)-1)* n )), "")

    Къде: n е максималният брой стойности в един ред.

    В нашия примерен набор от данни използваме следната формула, за да преобразуваме диапазон от един ред (D4:J4) в диапазон от три колони. Формулата се намира в клетка D8 и след това се копира в 3 колони и 3 реда.

    =IFERROR(IF(COLUMN(A1)>3, "", INDEX($D$4:$J$4, , COLUMN(A1)+(ROW(A1)-1)*3)), "")

    За да промените формата на диапазон от 1 колона (B4:B20) в диапазон от 5 колони, въведете формулата по-долу в D14 и я плъзнете през 5 колони и 4 реда.

    =IFERROR(IF(COLUMN(A1)>5, "", INDEX($B$4:$B$20, COLUMN(A1)+(ROW(A1)-1)*5)), "")

    В Excel 365 същите резултати могат да бъдат постигнати с еквивалентните формули WRAPCOLS:

    =WRAPROWS(D4:J4, 3, "")

    и

    =WRAPROWS(B4:B20, 5, "")

    Как работят тези формули

    По същество тези формули работят както в предишния пример. Разликата е в начина, по който определяте row_num и col_num координати за функцията INDEX:

    INDEX($D$4:$J$4,, COLUMN(A1)+(ROW(A1)-1)*3))

    За да получите номера на колоната за горната лява клетка в целевия диапазон (D8), използвайте този израз:

    КОЛОНА(A1)+(РЕД(A1)-1)*3)

    която се променя на:

    1+(1-1)*3

    и дава 1.

    В резултат на това формулата по-долу връща стойността от първата колона на посочения масив, която е "Ябълки":

    INDEX($D$4:$J$4,, 1)

    Досега резултатът е същият като в предишния пример. Но нека видим какво ще се случи в други клетки...

    В клетка D9 относителните референции на клетките се променят, както следва:

    INDEX($D$4:$J$4,, COLUMN(A2)+(ROW(A2)-1)*3))

    Така формулата се трансформира в:

    INDEX($D$4:$J$4,, 1+(2-1)*3))

    става:

    INDEX($D$4:$J$4,, 4))

    и връща стойността от четвъртата колона на посочения масив, която е "Cherries" в G4.

    Функцията IF проверява номера на колоната и ако той е по-голям от зададения брой колони, връща празен низ (""), в противен случай връща резултата от функцията INDEX:

    IF(COLUMN(A1)>3, "", INDEX(...))

    Завършвайки, функцията IFERROR предотвратява появата на грешки #REF! в "допълнителни" клетки, ако копирате формулата в повече клетки, отколкото е необходимо.

    Функцията WRAPCOLS или WRAPROWS не работи

    Ако функциите "wrap" не са налични в Excel или водят до грешка, най-вероятно причината е една от следните.

    #NAME? грешка

    В Excel 365 може да се появи грешка #NAME?, тъй като сте изписали неправилно името на функцията. В други версии тя показва, че функциите не се поддържат. Като обходен път можете да използвате алтернативата WRAPCOLS или WRAPROWS.

    #VALUE! грешка

    Възниква грешка #VALUE, ако вектор аргументът не е едномерен масив.

    #NUM! грешка

    Грешка #NUM възниква, ако wrap_count стойността е 0 или отрицателно число.

    #SPILL! грешка

    Най-често грешката #SPILL показва, че няма достатъчно празни клетки, в които да се изсипят резултатите. Изчистете съседните клетки и тя ще изчезне. Ако грешката продължава, вижте какво означава #SPILL в Excel и как да я поправите.

    Ето как да използвате функциите WRAPCOLS и WRAPROWS, за да преобразувате едномерен диапазон в двумерен масив в Excel. Благодаря ви, че прочетохте, и се надявам да се видим в нашия блог следващата седмица!

    Практическа работна тетрадка за изтегляне

    Функции WRAPCOLS и WRAPROWS - примери (.xlsx файл)

    Майкъл Браун е отдаден технологичен ентусиаст със страст към опростяване на сложни процеси с помощта на софтуерни инструменти. С повече от десетилетие опит в технологичната индустрия, той е усъвършенствал уменията си в Microsoft Excel и Outlook, както и в Google Sheets и Docs. Блогът на Майкъл е посветен на споделянето на неговите знания и опит с други, предоставяйки лесни за следване съвети и уроци за подобряване на продуктивността и ефективността. Независимо дали сте опитен професионалист или начинаещ, блогът на Michael предлага ценни прозрения и практически съвети за извличане на максимума от тези основни софтуерни инструменти.