Ячейки фильтра в качестве аргумента функции в формуле - PullRequest
0 голосов
/ 02 мая 2020

Я программист, поэтому, пожалуйста, потерпите меня. Я понимаю, что Excel не обязательно то, к чему я привык в других областях, но я ломаю голову над тем, как сделать sh что-то, что кажется несколько простым.

У меня есть столбец чисел которые сами являются основой формулы. Я хочу отфильтровать эти ячейки на основе некоторых критериев и передать их другой функции для выполнения вычислений.

Я понимаю, что это можно сделать с помощью «фильтров» в превосходном смысле. Это означало бы, что мне придется нажимать несколько раз для каждого вычисления, фильтровать результаты, копировать значение и вставлять его туда, где оно должно быть. Если данные когда-либо изменятся, мне придется сделать все это снова.

То, что я ищу, является эквивалентом фильтрации на языке программирования, вот пример:

let range = [1,2,3,4,0,-1,-2,-3,-4];
let subrange = range.filter(function (cell) { return cell > 0; });
subtotal(1,subrange);

Итак, на что похоже мое превосходство.

У меня есть столбец G, который содержит более 12 000 результатов, каждый из этих столбцов выглядит следующим образом:

=(En-Bn)/Bn

Они скопированы, n означает номер строки из 5- 12,000 +

Теперь я хотел бы создать ячейку M2, содержащую:

=SUBTOTAL(1,[ Gn in G5:G12000 where Gn > 0 ])

Цель состоит в том, чтобы я не хотел указывать и нажмите, потому что на самом деле мне нужно создать еще много ячеек (около 20) с подобными видами предикатов «фильтра».

Было бы неплохо, насколько это возможно, если бы я тоже этого не делал нужно указать диапазон столбцов n ... n-1, так как в идеале это может измениться. Может быть 10, может быть 20 000, не имеет значения.

Лучшая формула или решение будет выглядеть так:

SUBTOTAL(1, [ Gn in G0:GLENGTH where Gn > SOMECELL ])

Любые указатели или предложения, где читать, или решение было бы здорово. Я искал в Google, и мне кажется, что мне не хватает понимания, чтобы найти ответ в представленном материале.

Кроме того, прошу прощения за использование языка программирования, я знаю, что формулы Excel не обязательно являются 1: 1, я просто ищу способ сэкономить время. Приветствуются ответы в VBA или с помощью макросов, главное найти способ сделать это ...

Best, Jason

Update

Я должен указать, что это должен быть немного обратно совместимым, поэтому я не могу использовать функцию FILTER, которая доступна только в> = 365

Ответы [ 3 ]

1 голос
/ 03 мая 2020

Как насчет массива?

= СУММА (ЕСЛИ (G: G> 0, G: G, ""))

поместить курсор в «функциональную панель» с формулой. Затем нажмите CTRL + SHIFT + ENTER (в таком порядке, удерживая их все. {} Появится вокруг формулы.

Дайте мне знать, если потребуется дополнительная помощь.

Matt

1 голос
/ 03 мая 2020

Я совсем не уверен, что ваши попытки сэкономить время, общаясь на языке программирования вместо английского sh, действительно экономят время или пространство. Мои лучшие усилия определяют, что вы все запутали. Скажите, пожалуйста, почему простая формула ниже не работает.

=AVERAGEIF(G2:G15000,">"&A1,G2:G15000)

Эта формула требует, чтобы A1 содержала число, а формула поставляет знак>. В одном варианте A1 будет содержать и число, и сравнение, например> 1,2`

=AVERAGEIF(G2:G15000,A1,G2:G15000)

Приведенные выше формулы начинают диапазон с G2. Измените на G5, если это то, что вам нужно. G15000 - это случайное число, которое должно быть больше, чем все, что вам когда-либо понадобится. Функция игнорирует пробелы. Однако, если вас беспокоит наличие листа с 16000 строками в тот день, когда вы забыли, где настраивать формулу, я бы порекомендовал использовать именованный диапазон, который можно отформатировать как динамический c.

Именованные диапазоны лучше обрабатывать, чем адреса диапазонов, и имена могут быть даны описательно, например, HourlyReadings . Приведенная выше формула будет выглядеть следующим образом: -

=AVERAGEIF(HourlyReadings, ">"&A1,HourlyReadings)

Теоретически формула, с помощью которой определяется HourlyReadings , также может быть записана в формулу рабочего листа, но она станет громоздкой. Как показано выше, вам нужно заглянуть в менеджер имен, чтобы узнать, является ли диапазон динамическим c или нет, но, разумеется, после определения вы можете использовать одно и то же имя во многих функциях и формулах, что экономит много времени на обслуживание. .

1 голос
/ 02 мая 2020

Это для Excel 365, используя формулы листа. С данными в столбце G , начиная с G5 , в другой ячейке введите:

=SUM(FILTER(G:G,G:G>0))

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...