Зміст
Найшвидший спосіб перетворення стовпця або рядка значень у двовимірний масив - використання функції СРЗНАЧ або СРЗНАЧ.
З перших днів існування Excel, він дуже добре справлявся з обчисленням та аналізом чисел. Але маніпулювання масивами традиційно було складним завданням. Впровадження динамічних масивів значно спростило використання формул масивів. І зараз Microsoft випускає набір нових функцій динамічних масивів для маніпулювання та зміни форми масивів. У цьому уроці ви навчитеся користуватися двома такими функціями,WRAPCOLS і WRAPROWS, для швидкого перетворення стовпця або рядка в 2D масив.
Функція WRAPCOLS в Excel
Функція СРЗНАЧ в Excel перетворює рядок або стовпець значень у двовимірний масив на основі заданої кількості значень у рядку.
Синтаксис має наступні аргументи:
WRAPCOLS(vector, wrap_count, [pad_with])Де:
- вектор (обов'язково) - вихідний одновимірний масив або діапазон.
- wrap_count (обов'язкове) - максимальна кількість значень у колонці.
- pad_with (необов'язково) - значення для заповнення останнього стовпчика, якщо не вистачає елементів для його заповнення. Якщо не вказано, відсутні значення будуть заповнені #N/A (за замовчуванням).
Наприклад, для зміни діапазону B5:B24 на двовимірний масив з 5 значеннями в стовпчику, формула має вигляд:
=WRAPROWS(B5:B24, 5)
Ви вводите формулу в будь-яку комірку, і вона автоматично розливається на стільки комірок, скільки потрібно. У вихідних даних WRAPCOLS значення розташовуються вертикально, зверху вниз, на основі wrap_count Після закінчення підрахунку починається новий стовпчик.
Функція Excel WRAPROWS
Функція СРЗНАЧ в Excel перетворює рядок або стовпець значень у двовимірний масив на основі вказаної вами кількості значень у рядку.
Синтаксис наступний:
WRAPROWS(vector, wrap_count, [pad_with])Де:
- вектор (обов'язково) - вихідний одновимірний масив або діапазон.
- wrap_count (обов'язково) - максимальна кількість значень у рядку.
- pad_with (необов'язково) - значення для заповнення останнього рядка, якщо не вистачає елементів для його заповнення. За замовчуванням - #N/A.
Наприклад, для перетворення діапазону B5:B24 у двовимірний масив по 5 значень у кожному рядку використовується формула:
=WRAPROWS(B5:B24, 5)
Ви вводите формулу у верхню ліву комірку діапазону розливу, і вона автоматично заповнює всі інші комірки. Функція WRAPROWS упорядковує значення по горизонталі, зліва направо, на основі wrap_count Після досягнення лічильника, він починає новий рядок.
Наявність WRAPCOLS та WRAPROWS
Обидві функції доступні лише в Excel для Microsoft 365 (Windows і Mac) та Excel для Інтернету.
У більш ранніх версіях для виконання перетворень стовпця в масив і рядка в масив можна використовувати традиційні більш складні формули. Далі в цьому уроці ми детально розглянемо альтернативні рішення.
Порада. Для виконання зворотної операції, тобто зміни двовимірного масиву на один стовпець або рядок, використовуйте функцію TOCOL або TOROW відповідно.
Як перетворити стовпець / рядок у діапазон в Excel - приклади
Тепер, коли ви отримали уявлення про основне використання, давайте розглянемо кілька більш конкретних випадків.
Встановити максимальну кількість значень у стовпці або рядку
Залежно від структури вихідних даних, ви можете вважати за доцільне перегрупувати їх у стовпці (WRAPCOLS) або рядки (WRAPPROWS). Яку б функцію ви не використовували, вона є wrap_count аргумент, що визначає максимальну кількість значень у кожному стовпчику/рядку.
Наприклад, для перетворення діапазону B4:B23 в 2D масив, щоб кожен стовпець мав максимум 10 значень, скористайтеся такою формулою:
=WRAPCOLS(B4:B23, 10)
Для перестановки одного і того ж діапазону по рядках так, щоб у кожному рядку було максимум 4 значення, використовується формула:
=WRAPROWS(B4:B23, 4)
На зображенні нижче показано, як це виглядає:
Вставити пропущені значення в результуючий масив
Якщо значень недостатньо для заповнення всіх стовпців/рядків результуючого діапазону, WRAPROWS і WRAPCOLS повернуть помилки #N/A, щоб зберегти структуру 2D масиву.
Щоб змінити поведінку за замовчуванням, ви можете вказати користувацьке значення для опції pad_with аргумент.
Наприклад, щоб перетворити діапазон B4:B21 в 2D масив шириною не більше 5 значень, а останній рядок заповнити прочерками, якщо не вистачає даних для його заповнення, скористайтеся такою формулою:
=WRAPROWS(B4:B21, 5, "-")
Для заміни пропущених значень рядками нульової довжини (пробілами) використовується формула:
=WRAPROWS(B4:B21, 5, "")
Будь ласка, порівняйте результати з поведінкою за замовчуванням (формула в D5), де pad_with пропущено:
Об'єднання декількох рядків у 2D діапазон
Щоб об'єднати кілька окремих рядків в єдиний 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 масив
Щоб об'єднати кілька стовпців у 2D-діапазон, спочатку потрібно скласти їх по вертикалі за допомогою функції VSTACK, а потім обернути значення в рядки (WRAPPROWS) або стовпці (WRAPCOLS).
Наприклад, для об'єднання значень з 3 стовпців (B5:J5, B7:G7 та B9:F9) у 2D-діапазон, де кожен стовпець містить 10 значень, використовується формула:
=WRAPCOLS(HSTACK(B5:J5, B7:G7, B9:F9), 10)
Щоб об'єднати однакові стовпці в 2D-діапазон, де кожен рядок містить 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 на -1.
Альтернатива WRAPCOLS для Excel 365 - 2010
У старих версіях Excel, де функція WRAPCOLS не підтримується, можна побудувати власну формулу для згортання значень з одновимірного масиву в стовпці. Це можна зробити, використовуючи 5 різних функцій разом.
Альтернатива WRAPCOLS для перетворення рядка в 2D діапазон:
IFERROR(IF(ROW(A1)> n , "", INDEX( ряд_діапазон , , ROW(A1) + (COLUMN(A1)-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)), "")
І ця формула перетворює одностовпчиковий діапазон (В4:В20) на п'ятирядковий масив:
=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(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, що повертається по рядку, і 0, що повертається по стовпчику, і отримуєте в результаті 1.
Таким чином, формула INDEX у верхній лівій комірці діапазону призначення (D8) зазнає такої трансформації:
INDEX($D$4:$J$4, ,ROW(A1) + (COLUMN(A1)-1)*3))
зміни до
INDEX($D$4:$J$4, ,1)
і повертає значення з 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))
і повертає значення з 2-го стовпчика вказаного масиву, яким є "Абрикоси" в комірці E4.
Функція ЕСЛИ перевіряє номер рядка і, якщо він більший за вказану Вами кількість рядків (у нашому випадку 3), повертає порожній рядок (""), інакше - результат функції ИНДЕКС:
IF(ROW(A1)>3, "", INDEX(...))
Нарешті, функція IFERROR виправляє помилку #REF!, яка виникає, коли формула копіюється в більшу кількість комірок, ніж насправді потрібно.
Друга формула, яка перетворює стовпець у 2D-діапазон, працює за тією ж логікою. Різниця полягає в тому, що ви використовуєте комбінацію ROW + COLUMN, щоб обчислити row_num аргумент на користь ІНДЕКСу. col_num в даному випадку не потрібен, оскільки у вихідному масиві лише один стовпець.
Альтернатива WRAPROWS для Excel 365 - 2010
Щоб обернути значення з одновимірного масиву в рядки в Excel 2019 і більш ранніх версіях, можна скористатися наступними альтернативами функції ОБРАБОТКА.
Перетворення рядка в 2D діапазон:
IFERROR(IF(COLUMN(A1)> n , "", INDEX( ряд_діапазон , , СТОВПЧИК(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)), "")
Щоб перетворити діапазон з одного стовпчика (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))
і повертає значення з 4-го стовпчика заданого масиву, яким у G4 є "Cherry".
Функція ЕСЛИ перевіряє номер стовпця і, якщо він більший за вказану Вами кількість стовпців, повертає порожній рядок (""), інакше - результат функції ИНДЕКС:
IF(COLUMN(A1)>3, "", INDEX(...))
На завершення, IFERROR запобігає появі помилок #REF! в "зайвих" комірках, якщо ви копіюєте формулу в більшу кількість комірок, ніж насправді потрібно.
Не працює функція WRAPCOLS або WRAPROWS
Якщо функції "обгортання" недоступні у вашому Excel або призводять до помилки, це, швидше за все, пов'язано з однією з наведених нижче причин.
#NAME? помилка
В Excel 365 помилка #ИМЯ? може виникнути через неправильне написання імені функції. В інших версіях вона вказує на те, що функції не підтримуються. Як обхідний шлях можна використовувати альтернативу WRAPCOLS або альтернативу WRAPROWS.
#VALUE! помилка
Помилка #VALUE виникає у випадку, якщо вектор аргумент не є одновимірним масивом.
#NUM! помилка
Помилка #NUM виникає у випадку, якщо wrap_count значення 0 або від'ємне число.
#SPILL! помилка
Найчастіше помилка #SPILL вказує на те, що не вистачає порожніх клітинок для рознесення результатів. Очистіть сусідні клітинки, і вона зникне. Якщо помилка не зникає, перевірте, що означає #SPILL в Excel і як її виправити.
Ось так можна використовувати функції СРЗНАЧ і СРЗНАЧ для перетворення одновимірного діапазону в двовимірний масив в Excel. Дякую за увагу і сподіваюся побачити вас на нашому блозі наступного тижня!
Практичний посібник для завантаження
Функції WRAPCOLS та WRAPROWS - приклади (файл .xlsx)