Иногда для удобства требуется объединить три и более списка значений в один.
Пусть дано 5 списков и все они разной длины (см. Файл примера ).
Объединим все значения из 5 списков в один. Задача объединения 2-х списков решена в одноименной статье .
Объединенный спискок будем строить на основе функции СМЕЩ()
=СМЕЩ(заголовок первого списка;Номер элемента в списке;Номер списка-1)
Создадим небольшую служебную таблицу для подсчета количества значений в каждом списке и определения позиции первого элемента каждого списка в объединенном списке.
Эта таблица позволит нам сопоставить каждой позиции объединенного списка Номер исходного списка:
=ГПР(СТРОКА()-СТРОКА($H$11);$B$7:$F$8;2;ИСТИНА)
Номер списка является смещением по столбцам в формуле на основе СМЕЩ()
Подробности можно посмотреть в файле примера на листе Пример2.
Сначала создадим именованный диапазон , содержащий значения из всех списков. Для этого:
Для вывода всех значений из 5 списков в один столбец будем использовать функцию ИНДЕКС() . Эта функция будет последовательно выводить значения из всех ячеек диапазона Диапазон_Списков на основании их номера столбца и номера строки. Осталось только определить адреса не пустых ячеек.
Создадим массив пар (номер столбца; номер строки) для всех ячеек диапазона. Для этого применим трюк: значения пары будем хранить в виде обычного числа, но формировать его будем по определенному правилу: правая часть числа будет содержать номер строки (для этого выделяется два разряда, т.е. максимальная длина списка может быть 99), а левая часть числа будет содержать номер столбца. Например, число 512 будет означать: 5-й столбец, 12-ая строка. Естественно, при необходимости можно увеличить разрядность для хранения номеров строк (формула из файла примера позволяет столбцам иметь до 9999 строк).
Технически осуществим это так. Сначала определим номер столбца и строки левого верхнего угла нашего Диапазона_Списков . Для этого создайте две именованные формулы =МИН(СТОЛБЕЦ(Диапазон_Списков)) и =МИН(СТРОКА(Диапазон_Списков))
Создайте еще одну именованную формулу Адреса: =ЕСЛИ(ЕПУСТО(Диапазон_Списков);""; --((СТОЛБЕЦ(Диапазон_Списков)-Мин_Столбец+1)&ВЫБОР(ДЛСТР(СТРОКА(Диапазон_Списков)-Мин_Строка+1);"0";"")&СТРОКА(Диапазон_Списков)-Мин_Строка+1))
Эта формула вернет массив адресов из нашего диапазона {101;201;301;401;501: 102;202;302;"";502: 103;203;303;"";503: 10…}. Вместо адресов пустых ячеек в массиве содержатся значения Пустой текст (""). Номера столбцов и строк отсчитываются от левой верхней ячейки Диапазона_список .
Заключительный этап. Формируем объединенный список. Запишем в ячейке следующую формулу: =ЕСЛИОШИБКА(ИНДЕКС(Диапазон_Списков; --ПРАВСИМВ(НАИМЕНЬШИЙ(Адреса;СТРОКА(Z1));2);--ЛЕВСИМВ(НАИМЕНЬШИЙ(Адреса;СТРОКА(Z1)); ДЛСТР(НАИМЕНЬШИЙ(Адреса;СТРОКА(Z1)))-2));"")
Функция НАИМЕНЬШИЙ() будет последовательно извлекать все числа, содержащие адреса ячеек. Функция ПРАВСИМВ() будет извлекать из этих чисел номер строки, а функция ЛЕВСИМВ() – номер столбца. Эти две функции возвращают текстовые значения, поэтому применим двойное отрицание (--), чтобы преобразовать текст в число (см. статью Преобразование чисел из текстового формата в числовой (часть 1) ).
Таким образом можно объединить нужное количество столбцов, каждый из которых длиной не более 99 строк.
Для объединения столбцов, каждый из которых длиной не более 9999 строк нужно использовать формулу
=ЕСЛИОШИБКА(ИНДЕКС(Диапазон_Списков;--ПРАВСИМВ(НАИМЕНЬШИЙ(Адреса;СТРОКА(Z1));4);--ЛЕВСИМВ(НАИМЕНЬШИЙ(Адреса;СТРОКА(Z1));ДЛСТР(НАИМЕНЬШИЙ(Адреса;СТРОКА(Z1)))-4));"")
Именованную формулу Адреса также придется подкорректировать:
=ЕСЛИ(ЕПУСТО(Диапазон_Списков);"";--((СТОЛБЕЦ(Диапазон_Списков)-Мин_Столбец+1)&ВЫБОР(ДЛСТР(СТРОКА(Диапазон_Списков)-Мин_Строка+1);"000";"00";"0";"")&СТРОКА(Диапазон_Списков)-Мин_Строка+1))
Примечание : при объединении большого количества столбцов с количеством строк >100, расчет формулы может притормаживать.
© Copyright 2013 - 2025 Excel2.ru. All Rights Reserved
Комментарии