Съдържание
Най-бързият начин за трансформиране на колона или ред от стойности в двумерен масив е чрез функцията 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)
Опаковане и сортиране на масива
В случаите, когато в изходния диапазон има стойности в произволен ред, а желаете изходът да бъде сортиран, процедирайте по този начин:
- Сортирайте първоначалния масив по желания начин с помощта на функцията SORT.
- Подайте сортирания масив към 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 файл)