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