В этом случае: нелегкий способ указать последний столбец в диапазоне, когда столбцы могут быть добавлены, одновременно допуская постоянно увеличивающееся количество строк.
Дизайн представляет собой электронную таблицу + форму Google, с последующими вкладками / листами, которые выполняют большую часть работы. Форма должна будет со временем меняться, и те вкладки, которые выполняют тяжелую работу, должны постоянно обновляться (для этого требуется некоторый код), так что будет добавлено больше столбцов, и я не хочу, чтобы пользователю приходилось вернитесь, найдите и измените формулы, которые необходимо обновить с учетом новых последних столбцов.
Итак, я добавляю в столбцы, когда добавляется новый элемент электронной таблицы, а последний столбец содержит нужные мне результаты. Я просто не могу жестко закодировать положение этого столбца в других формулах, использующих результаты, плюс мне нужно обрабатывать его для постоянно растущего числа строк.
Динамическое определение последнего столбца было легко найти, который просто получает список всех номеров столбцов, возвращая наибольшее значение:
=max(filter(column(D1:1),len(D1:1)))
... куда подойдет любая буква столбца. Таким образом, для данной строки вы можете получить данные последнего столбца:
=index(E3:3,1,max(filter(column(E1:1),len(E1:1)))-4)
// the "-4" is to offset for the 4th cell in the range.
Но INDEX
не работает в ARRAYFORMULA
. В поисках помощи есть много ответов, в которых говорится, что в этих случаях следует использовать VLOOKUP
, включая ответы, касающиеся динамического номера столбца. Может быть, я упускаю суть, но соответствующий VLOOKUP
, AFAIK, это:
=VLOOKUP(E3,E3:3,max(filter(column(E1:1),len(E1:1)))-4)
Который в ARRAYFORMULA
(чтобы охватить все строки) выглядит так:
=ARRAYFORMULA(VLOOKUP(E3:E,E3:3,max(filter(column(E1:1),len(E1:1)))-4))
... что не работает, потому что один диапазон строк "E3: 3" остается статическим для всех строк, поэтому я просто получаю результаты для 3-й строки во всех остальных строках.
Но я обнаружил, что могу использовать:
=ARRAYFORMULA(E3:E & ": " & indirect("R3C" & B1 & ":C" & B1,FALSE))
// where B1 is max(filter(column(E1:1),len(E1:1)))
Это объединяет запись в 5-м столбце с ":", а затем с записью в последнем столбце. Спецификатор диапазона «E3: E» в ARRAYFORMULA
повторяется для всех строк после третьей, а запись диапазона R1C1 в INDIRECT
для R3Cn: Cn (где n
- номер последнего столбца) расширяет ARRAYFORMULA
вниз по последнему столбцу.
Есть ли лучшее объяснение этого поведения?
Что я делал не так в VLOOKUP
? ... насколько я могу судить, VLOOKUP
- это способ сделать INDEX
в ARRAYFORMULA
, но не вижу там решения.