Оглавление
Простой способ преобразования массива или диапазона в столбец с помощью функции TOCOL.
Возможность транспонировать данные из столбцов в строки и в обратном направлении появилась в Excel довольно давно. Но преобразование диапазона ячеек в один столбец было непростой задачей. Теперь ситуация наконец-то меняется. Microsoft представила новую функцию под названием TOCOL, которая может в мгновение ока выполнить преобразование массива в столбец. Ниже приведен список задач, которые эта новая функция может легко решить.
Функция ТОКОЛ в Excel
Функция TOCOL в Excel преобразует массив или диапазон ячеек в один столбец.
Функция принимает три аргумента, но только первый из них является обязательным.
TOCOL(array, [ignore], [scan_by_column])Где:
Массив (требуется) - массив или диапазон для преобразования в столбец.
Игнорировать (необязательно) - определяет, игнорировать ли пробелы и/или ошибки. Может быть одним из этих значений:
- 0 или опущено (по умолчанию) - сохранить все значения
- 1 - игнорировать пробелы
- 2 - игнорировать ошибки
- 3 - игнорировать пробелы и ошибки
Scan_by_column (необязательно) - определяет, горизонтально или вертикально сканировать массив:
- FALSE или опущено (по умолчанию) - сканирование массива по строкам слева направо.
- TRUE - сканирование массива по столбцам сверху вниз.
Советы:
- Чтобы преобразовать массив в одну строку, используйте функцию TOROW.
- Чтобы выполнить обратное преобразование столбца в массив, используйте либо функцию WRAPCOLS для обертывания по столбцам, либо функцию WRAPROWS для обертывания по строкам.
- Чтобы транспонировать массив из горизонтального в вертикальный или наоборот, т.е. заменить строки на столбцы, используйте функцию TRANSPOSE.
Наличие ТОКОЛ
TOCOL - это новая функция, которая поддерживается в Excel для Microsoft 365 (для Windows и Mac) и Excel для веб.
Базовая формула TOCOL для преобразования диапазона в столбец
Формула TOCOL в своей простейшей форме требует только одного аргумента -... массив Например, чтобы поместить двумерный массив, состоящий из 3 столбцов и 4 строк, в один столбец, формула имеет вид:
=TOCOL(A2:C5)
Формула вводится только в одну ячейку (E2 в данном примере) и автоматически переливается в нижележащие ячейки. В терминах Excel результат называется диапазоном перелива.
Как работает эта формула:
Технически, диапазон A2:C5 сначала преобразуется в двумерный массив. Обратите внимание на строки, разделенные точкой с запятой, и столбцы, разделенные запятой:
{"Apple","Banana","Cherry";1,0,3;4,#N/A,6;7,8,9}
Функция TOCOL сканирует массив слева направо и преобразует его в одномерный вертикальный массив:
{"Apple";"Banana";"Cherry";1;0;3;4;#N/A;6;7;8;9}
Результат помещается в ячейку E2, из которой он перетекает в нижележащие ячейки.
Как использовать функцию ТОКОЛ в Excel - примеры формул
Чтобы лучше понять возможности функции TOCOL и то, какие задачи она может решать, давайте рассмотрим несколько примеров формул.
Преобразование массива в столбец с игнорированием пробелов и ошибок
Как вы могли заметить в предыдущем примере, формула TOCOL по умолчанию сохраняет все значения из исходного массива, включая пустые ячейки и ошибки.
В результирующем массиве пустые ячейки представлены нулями, что может сбить с толку, особенно если исходный массив имеет 0 значений. Решение заключается в следующем пропускать заготовки Для этого вы устанавливаете 2-й аргумент равным 1:
=TOCOL(A2:C5, 1)
На игнорировать ошибки , установите второй аргумент равным 2:
=TOCOL(A2:C5, 2)
Исключить оба варианта, пробелы и ошибки , используйте 3 для игнорировать аргумент:
=TOCOL(A2:C5, 3)
Сканирование массива по горизонтали или вертикали
По умолчанию scan_by_column (FALSE или опущен), функция TOCOL сканирует массив по горизонтали по строкам. Чтобы обрабатывать значения по столбцам, установите этот аргумент в TRUE или 1. Например:
=TOCOL(A2:C5, ,TRUE)
Обратите внимание, что в обоих случаях возвращаемые массивы имеют одинаковый размер, но значения расположены в разном порядке.
Объедините несколько диапазонов в один столбец
Если вы имеете дело с несколькими несмежными диапазонами, то вы можете сначала объединить диапазоны по вертикали в один массив с помощью функции VSTACK, а затем использовать TOCOL для преобразования объединенного массива в столбец.
Если предположить, что первый диапазон - A2:C4, а второй - A8:C9, то формула примет следующий вид:
=TOCOL(VSTACK(A2:C4, A8:C9))
Эта формула демонстрирует поведение по умолчанию - считывает объединенные массивы горизонтально слева направо, как показано в столбце E на изображении ниже.
Чтобы считать значения по вертикали сверху вниз, установите 3-й аргумент TOCOL в TRUE:
=TOCOL(VSTACK(A2:C4, A8:C9), ,TRUE)
Обратите внимание, что в этом случае формула сначала возвращает значения из столбца A обоих массивов, затем из столбца B и т.д. Причина в том, что TOCOL сканирует один сложенный массив, а не отдельные диапазоны.
Если ваша бизнес-логика требует укладывать исходные диапазоны горизонтально, а не вертикально, то используйте функцию HSTACK вместо VSTACK.
Чтобы добавить каждый последующий массив справа от предыдущего и прочитать объединенные массивы по горизонтали, формула выглядит следующим образом:
=TOCOL(HSTACK(A2:C4, A8:C10))
Чтобы добавить каждый последующий массив справа от предыдущего и просканировать объединенные массивы по вертикали, используется формула:
=TOCOL(HSTACK(A2:C4, A8:C10), ,TRUE)
Извлечение уникальных значений из диапазона с несколькими столбцами
Функция Excel UNIQUE может легко найти уникальные значения в одном столбце или строке, а также вернуть уникальные строки, но она не может извлечь уникальные значения из многостолбцового массива. Решением является использование ее вместе с функцией TOCOL.
Например, чтобы извлечь все различные (отличные) значения из диапазона A2:C7, используется следующая формула:
= UNIQUE(TOCOL(A2:C7))
Кроме того, вы можете обернуть приведенную выше формулу в функцию SORT, чтобы расположить возвращаемый массив в алфавитном порядке:
=SORT(UNIQUE(TOCOL(A2:C7)))
Как преобразовать диапазон в столбец в Excel 365 - 2010
В версиях Excel, где функция TOCOL не поддерживается, существует пара альтернативных способов преобразования диапазона ячеек в столбец. Эти решения довольно хитрые, но в любом случае работающие.
Чтобы прочитать диапазон по строкам:
ИНДЕКС( ассортимент , QUOTIENT(ROW(A1)-1, COLUMNS( ассортимент ))+1, MOD(ROW(A1)-1, COLUMNS( ассортимент ))+1)Чтобы прочитать диапазон по столбцам:
ИНДЕКС( ассортимент , MOD(ROW(A1)-1, ROWS( ассортимент ))+1, QUOTIENT(ROW(A1)-1, ROWS( ассортимент ))+1)Для нашего набора данных формулы выглядят следующим образом:
Для сканирования диапазона по горизонтали слева направо :
=INDEX($A$2:$C$5, QUOTIENT(ROW(A1)-1, COLUMNS($A$2:$C$5))+1, MOD(ROW(A1)-1, COLUMNS($A$2:$C$5))+1)
Эта формула эквивалентна функции TOCOL с 3-м аргументом, установленным на FALSE или опущенным:
=TOCOL(A2:C5)
Для сканирования диапазона вертикально сверху вниз :
=INDEX($A$2:$C$5, MOD(ROW(A1)-1, ROWS($A$2:$C$5))+1, QUOTIENT(ROW(A1)-1, ROWS($A$2:$C$5))+1)
Эта формула сравнима с функцией TOCOL с 3-м аргументом, установленным в TRUE:
=TOCOL(A2:C5, ,TRUE)
В отличие от TOCOL, альтернативные формулы следует вводить в каждую ячейку, в которой вы хотите получить результат. В нашем случае формулы попадают в ячейки E2 (по строке) и G2 (по столбцу), а затем копируются вниз в строку 13.
Если формулы будут скопированы в большее количество строк, чем нужно, в "лишних" ячейках появится ошибка #REF! Чтобы этого не произошло, вы можете вложить формулы в функцию IFERROR следующим образом:
=IFERROR(INDEX($A$2:$C$5, QUOTIENT(ROW(A1)-1, COLUMNS($A$2:$C$5))+1, MOD(ROW(A1)-1, COLUMNS($A$2:$C$5))+1), "")
Обратите внимание, что для правильного копирования формул мы фиксируем диапазон, используя абсолютные ссылки на ячейки ($A$2:$C$5). Вместо этого можно использовать именованный диапазон.
Как работают эти формулы
Ниже приведен подробный разбор первой формулы, которая упорядочивает ячейки по строкам:
=INDEX($A$2:$C$5, QUOTIENT(ROW(A1)-1, COLUMNS($A$2:$C$5))+1, MOD(ROW(A1)-1, COLUMNS($A$2:$C$5))+1)
Идея заключается в том, чтобы использовать функцию INDEX для возврата значения определенной ячейки на основе ее относительных номеров строки и столбца в диапазоне.
Сайт номер строки рассчитывается с помощью этой комбинации:
QUOTIENT(ROW(A1)-1, COLUMNS($A$2:$C$5))+1
QUOTIENT возвращает целочисленную часть деления.
Для числитель Вы используете ROW(A1)-1, который возвращает порядковый номер от 0 в E2 (первая ячейка, в которую введена формула) до 11 в E13 (последняя ячейка, в которую введена формула).
Сайт знаменатель brough by COLUMNS($A$2:$C$5)) является постоянной и равна количеству столбцов в вашем диапазоне (в нашем случае 3).
Теперь, если вы проверите результат QUOTIENT для первых 3 клеток (E2:E4), вы увидите, что он равен 0 (потому что целочисленная часть деления равна нулю). Добавление 1 дает номер строки 1.
Для следующих 3 ячеек (E5:E5) QUOTIENT возвращает 1, а операция +1 обеспечивает номер строки 2. И так далее.
Другими словами, эта часть формулы создает повторяющуюся последовательность чисел, например, 1,1,1,1,2,2,2,3,3,3,4,4,4... Каждое число повторяется столько раз, сколько столбцов в вашем диапазоне.
Для расчета номер столбца , вы строите соответствующую последовательность чисел, используя функцию MOD:
MOD(ROW(A1)-1, COLUMNS($A$2:$C$5))+1
Поскольку в нашем диапазоне (A2:C5) 3 столбца, последовательность должна быть 1,2,3,1,2,3,....
Функция MOD возвращает остаток после деления.
В E2, MOD(ROW(A1)-1, COLUMNS($A$2:$C$5))+1)
становится
MOD(1-1, 3)+1)
и возвращает 1.
В E3, MOD(ROW(A2)-1, COLUMNS($A$2:$C$5))+1)
становится
MOD(2-1, 3)+1)
и возвращает 2.
Если номера строк и столбцов установлены, INDEX без проблем получит нужное значение.
В E2, INDEX($A$2:$C$5, 1, 1) возвращает значение из 1-й строки и 1-го столбца ссылаемого диапазона, т.е. из ячейки A2.
В E3 INDEX($A$2:$C$5, 1, 2) возвращает значение из 1-й строки и 2-го столбца, т.е. из ячейки B2.
И так далее.
Вторая формула, которая сканирует диапазон по столбцам, работает аналогичным образом. Разница в том, что она использует MOD для получения номера строки и QUOTIENT для получения номера столбца.
Функция TOCOL не работает
Если функция TOCOL выдает ошибку, скорее всего, причина одна из этих:
TOCOL не поддерживается в вашем Excel
Если вы получаете ошибку #NAME?, в первую очередь необходимо проверить правильность написания имени функции. Если имя правильное, но ошибка сохраняется, функция недоступна в вашей версии Excel. В этом случае рассмотрите возможность использования альтернативы TOCOL.
Массив слишком большой
Ошибка #NUM указывает на то, что массив не помещается в столбец. Типичный случай - когда вы ссылаетесь на целые столбцы или строки.
Недостаточно пустых ячеек
При возникновении ошибки #SPILL проверьте, достаточно ли в столбце, в который вводится формула, пустых ячеек для заполнения результатами. Если ячейки визуально пустые, убедитесь, что в них нет пробелов и других непечатных символов. Для получения дополнительной информации см. раздел Как исправить ошибку #SPILL в Excel.
Вот как можно использовать функцию TOCOL в Excel 365 и альтернативные решения в более ранних версиях для преобразования двумерного массива в один столбец. Я благодарю вас за чтение и надеюсь увидеть вас в нашем блоге на следующей неделе!
Практическая тетрадь
Функция ТОКОЛ в Excel - примеры формул (файл .xlsx)