Использование ARRAYFORMULA и INDIRECT для перебора строк и возврата в виде блока

Sheet1 имеет столбцы от A до D, где A содержит уникальный ключ записи.

На Sheet2 я хочу переставить данные в соответствии со своим порядком сортировки. Столбец A содержит мои собственные заказные ключи записи.

То, что я делал до сих пор на Sheet2, это: Я рассчитываю позиции записей в столбце B как

=ARRAYFORMULA(MATCH(A1:A100,Sheet!A:A,0))

И я пытался использовать ARRAYFORMULA INDIRECT, чтобы получить данные за один раз. Я могу правильно получить одну строку, используя

=ARRAYFORMULA(INDIRECT(("Sheet1!B"&B1&":D"&B1)))

Я хочу что-то вроде ниже, но он по-прежнему возвращает ТОЛЬКО первую строку.

=ARRAYFORMULA(INDIRECT(("Sheet1!B"&B1:B100&":D"&B1:B100)))

Помощь.


person Riyaz Mansoor    schedule 17.12.2013    source источник
comment
Создан пример для экспериментов docs.google.com/spreadsheets/d/   -  person Pavel 'Strajk' Dolecek    schedule 22.03.2020


Ответы (1)


К сожалению, INDIRECT не поддерживает итерацию по массиву.

К счастью, VLOOKUP делает это, а также означает, что вам не нужен вспомогательный столбец. Так:

=ArrayFormula(VLOOKUP(A1:A100,Sheet1!A:D,{2,3,4}*SIGN(ROW(A1:A100)),0))

а в новой версии Таблиц третья аргумент можно упростить:

=ArrayFormula(VLOOKUP(A1:A100,Sheet1!A:D,{2,3,4},0))

person AdamL    schedule 17.12.2013
comment
Сработало как шарм, спасибо Адам. Если подумать, это тоже сработает, как стол для бедняков, не так ли? - person Riyaz Mansoor; 17.12.2013
comment
Почему такой полезной информации нет в документации? - person Riyaz Mansoor; 17.12.2013
comment
Конечно, его можно было бы использовать в качестве соединения таблиц, хотя часто это снижает производительность (формула пересчитывается при каждом редактировании, которое вы вносите), поэтому вы можете рассмотреть возможность изменения значений только после того, как формула выполнит свою работу. Что касается документации, она улучшилась с новой версией Таблиц, но есть еще много подобных вещей, которые нам предстоит обнаружить. productforums.google.com/forum / #! Searchin / docs / - person AdamL; 18.12.2013