Преобразование столбца / строки в массив в Excel: функции WRAPCOLS & WRAPROWS

  • Поделись Этим
Michael Brown

Самый быстрый способ преобразования столбца или строки значений в двумерный массив - это использование функции 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)

    Заверните и отсортируйте массив

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

    1. Отсортируйте исходный массив так, как вам нужно, используя функцию SORT.
    2. Подать отсортированный массив в 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)

    Майкл Браун — увлеченный технологический энтузиаст, стремящийся упростить сложные процессы с помощью программных инструментов. Имея более чем десятилетний опыт работы в технологической отрасли, он отточил свои навыки в Microsoft Excel и Outlook, а также в Google Sheets и Docs. Блог Майкла посвящен тому, чтобы делиться своими знаниями и опытом с другими, предоставляя простые советы и учебные пособия для повышения производительности и эффективности. Являетесь ли вы опытным профессионалом или новичком, в блоге Майкла вы найдете ценную информацию и практические советы, которые помогут вам максимально эффективно использовать эти важные программные инструменты.