Страницы: 1
RSS
Как склеить несколько несмежных диапазонов данных в один одномерный массив (список)., Без VBA. Без PQ. Без сводных таблиц. Без удаления дубликатов. Одной формулой. На лету.
 
Всем здрасьте. Собственно сабж.
Николай в 2017-м склеивал. Но иначе.

P/S/ Задача сферы образовательной, а не практической. Но это временно )  
Изменено: Сергей Евдокимов - 12.11.2021 07:56:18
Компьютер никогда не заменит человека (©️ Hannibal Lecter)
 
Модифицировать это  чуток и то что хочется. или  тут
Изменено: БМВ - 12.11.2021 08:12:36
По вопросам из тем форума, личку не читаю.
 
Цитата
написал: Модифицировать  это   чуток
Ууу, такие многоэтажные ребусы да еще и заморским экселем мне расшифровывать пока не под силу.
По простому б, по-русски. Сам, так сказать, принцип.  
Компьютер никогда не заменит человека (©️ Hannibal Lecter)
 
Цитата
Сергей Евдокимов написал:
заморским экселем мне расшифровывать
так примеры то в файлах, оно само расшифруется

Во второй теме по ссылке Саша подробно расписал. И к этому варианту  можно добавить второй:
1. Берется массив от 1 до по количеству ячеек в прямоугольнике
2. на основе кратности количеству столбцов и строк из последовательности 1,2,.... всегда можно вычислить двумерную координату
3. получить значение из двумерного массива и сравнить с условием например что оно не пустое
4. если условие выполнено, то если не нужно сортировать, то просто берем индекс текущий.
5. из этого массива берем по возрастанию полученное и преобразовываем снова в двумерную, по которsй берем значение из исходного.
Как-то так
По вопросам из тем форума, личку не читаю.
 
Еще формульный вариант с применением INDIRECT. (В свое время подсмотрел на буржуйском форуме).
Код
=INDIRECT(TEXT(MOD(SMALL(IF(($A$2:$C$8<>"");ROW($A$2:$A$8)*1000+COLUMN($A$1:$C$1)*1000001;99999999);ROW(A1));1000000);"R0C000");)

В случае надобности можно модифицировать так, чтобы выводились неповторяющиеся значения.
Изменено: memo - 12.11.2021 13:16:11
 
, , спасибо вам за попытку помочь, разъяснить.
Признаюсь честно, пока я не врубаюсь. Впереди выходные, попробую посидеть-поразбираться. Быть может, удаться постигнуть. Но уверенности нет.
Компьютер никогда не заменит человека (©️ Hannibal Lecter)
 
Цитата
написал:
3. получить значение из двумерного массива и сравнить с условием например что оно не пустое
Все получил. Предположим, сравнил, отобрал мне нужное. И превратил несмежные диапазоны в двумерный массив значений
скрин

далее...
Цитата
написал: 4. ... просто берем индекс текущий.
что такое "текущий"? Индекс чего брать? Как ?
Мне осталось просто двумерный массив превратить в одномерный. Подскажите какой формулой. По-русски.

P/S/  У МеМо конструкция рабочая. Но я совсем не втыкаю какова там суть заложена.
Изменено: Сергей Евдокимов - 13.11.2021 07:35:33
Компьютер никогда не заменит человека (©️ Hannibal Lecter)
 
Цитата
Сергей Евдокимов написал:
P/S/  У МеМо конструкция рабочая. Но я совсем не втыкаю какова там суть заложена.
и даже короткая, но летуууучая

=IFERROR(
INDEX($1:$1048576;
MOD(SMALL(IF($A$2:$C$8<>"";ROW($A$2:$C$8)%%+COLUMN($A$2:$C$8));ROWS(F$2:F2));1)/1%%+0,1;
INT(SMALL(IF($A$2:$C$8<>"";ROW($A$2:$C$8)%%+COLUMN($A$2:$C$8));ROWS(F$2:F2))));
"")
По вопросам из тем форума, личку не читаю.
 
Понял в чем разница. Я думаю/пытаюсь и хотел конвертировать именно массив.  Двумерный в одномерный. Чтобы лишь одной формулой из двумерного массива получить нужный одномерный. И не могу.

Если же этот двумерный массив выложить в виде таблицы (диапазона) и тянуть из нее (т.е. уже из самой таблицы) данные c помощью проверки различных условий, например,
  • наличия в ячейках значений
  • наличия ошибок
  • и т.д. и т.д.
+ протянуть формулу для каждой ячейки, то так да, возможно. Уже сделал. Возможно, но не интересно )
Изменено: Сергей Евдокимов - 13.11.2021 08:18:13
Компьютер никогда не заменит человека (©️ Hannibal Lecter)
 
И в чем проблема?

=INDEX($1:$1048576;
MOD(SMALL(IF($A$2:$C$8<>"";ROW($A$2:$C$8)%%+COLUMN($A$2:$C$8));N(INDEX(ROW(A1:INDEX(A:A;COUNT($A$2:$C$8)));)));1)/1%%+0,1;
INT(SMALL(IF($A$2:$C$8<>"";ROW($A$2:$C$8)%%+COLUMN($A$2:$C$8));N(INDEX(ROW(A1:INDEX(A:A;COUNT($A$2:$C$8)));)))))

И это на старом Excel без функции последовательность.

Если нужно именно с массивом двумерным, а не с диапазоном, то вы пример то подготовьте нормальный. хотя в той теме формула базируется на индексе от 1 до .... и просто принцип можно перенести. Одно но, как появляется двумерный массив? Если он уже генерится формулой, то как минимум одно измерение занято, а если там занято 2 то формулы почти бессильны.
Изменено: БМВ - 13.11.2021 08:38:26
По вопросам из тем форума, личку не читаю.
 
Цитата
написал:
пример то подготовьте
Можно усложнить: Дано 1 и Дано 2 на разных листах. Для упрощения можно использовать Диспетчер имен
 
А чем не устроит?
Код
=ЕСЛИОШИБКА(НАИМЕНЬШИЙ(A$2:C$22;СТРОКА(E1));"")

На приведённом примере работает.

Или виртуальный массив:

Код
=НАИМЕНЬШИЙ(A2:C20;СТРОКА(СМЕЩ(A1;;;СЧЁТ(A2:C20))))
 
Цитата
Светлый написал:
А чем не устроит?
ну тут то даже медведю понятно что частный случай, где числа в данных.
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх