2016-02-23 3 views
0

в документации функции arrayformula Google Таблиц говоритARRAYFORMULA в Google Таблицах с вложенными массивами

Включает отображение значений, возвращаемых из формулы массива в несколько строк и/или столбцов и использование не-массива функции с массивами.

Это хорошо работает в следующем случае, который просто делит все значения в столбце на пять:

=arrayformula(A2:A/5) 

Теперь я хочу, чтобы нижняя граница результат в каждой строке на 0, т.е. в строке n Я хочу вычислить max(An, 0). Это моя нерабочая попытка:

=arrayformula(max(A2:A/5, 0)) 

max сами будет отлично работать без использования arrayformula, то есть, если я заполняю max(A2/5, 0) вниз все строки, которые я получаю именно то, что я хочу. Я хочу, чтобы функция max работала на двух одиночных значениях, единственное значение, найденное в A n и константа 0. Причина, по которой подход arrayformula не работает, заключается в том, что max «крадет» диапазон, суммируя весь диапазон A2:A в один номер. Таким образом, arrayformula работает только с этим номером и полностью игнорирует диапазон A2:A, следовательно, производит одинаковое значение для всех ячеек.

Как сделать arrayformula интерпретировать диапазон A2:A, или, вернее, как предотвратить функцию max от этого и заставить ее работать с двумя отдельными значениями?

(я могу решить эту проблему с if функции вместо этого, но это не кажется особенно элегантно и требует много повторения кода, в частности, так как моя реальная проблема использует более активное участие арифметика и сочетание min и max.)

+0

Что вы подразумеваете под «нижней границей»? Просьба привести пример списка входных значений и списка желаемого вывода. – daniel

+0

По нижней границе означает, что результат должен быть не менее 0. Следовательно, 'max'. Разделение на 5 является просто примером, чтобы обеспечить что-то значимое для arrayformula. Вход = 10 -> Выход = 2. Input = -10 -> Output = 0. –

+0

Просьба привести пример, который выглядит так: input = {1, 2, -3, 5, 10, 0, -1}, output = {1,2,5,10} , Похоже, что вам нужна функция 'filter()' – daniel

ответ

1

MAX - это совокупная функция: эти функции выполняют вычисление по набору значений и возвращают одно значение. Вы можете проверить, работает ли это (предполагая, что ваши ценности в Col A)

=ArrayFormula(if(len(A2:A),--(A2:A/5>0)*(A2:A/5),)) 
+0

Спасибо, но в вопросе уже сказано, что 'max' является агрегированной функцией. Реальная проблема более сложная и требует больше вложенности с помощью 'min' и т. Д. Таким образом, ваше решение будет работать для SSSCE I, но не решит общую проблему. –

+0

Хорошо. Невозможно увидеть «общую проблему», если вы не показываете ее. Как уже говорил Даниэль, некоторые уточнения конечной цели, безусловно, помогут. – JPV

0

У вас есть два варианта:

=arrayformula(if(A2:A>0,A2:A/5,0)) 

и

=arrayformula(filter(A2:A,A2:A>0)/5) 

Первый вариант даст вам ноль когда есть отрицательное число. Второй вариант пропускает нули, поэтому вы можете получить более короткий массив.

+0

Я ценю ваше усилие, @ daniel, но, как я уже сказал, я могу решить эту задачу с помощью функции if, но моя настоящая проблема больше связана с тем, что простой, если не будет работать. Я думаю, это не поможет, если я поставил вопрос более сложным. Обратите внимание, что для решения с 'filter' вам в действительности не нужна' arrayformula'. –