Фильтрация формулы массива Excel

45
4

Если у меня есть таблица, содержащая следующую строку с 4 столбцами

Чистый денежный поток 0,00 -80.00 500,00

Я знаю, что могу вернуть всю строку {0.00, -80.00, 500.00} со следующей формулой массива:

= INDEX (B1: D3, MATCH ("Чистый денежный поток", $ A: $ A, 0), 0)

Но как мне получить только ненулевые значения, возвращаемые в виде строки (т.е.NET Cashflow <> 0)

спросил(а) 2018-08-18T00:24:00+03:00 1 год, 3 месяца назад
2
Решение
45

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

=PRODUCT(IF(INDEX(B:D,MATCH("Net Cashflow",$A:$A,0),0)=0,1,(INDEX(B:D,MATCH("Net Cashflow",$A:$A,0),0))))

введенный как формула массива.

Это просто применяется ваша формула по линиям, предложенным @Jeeped.

Но чтобы ответить на ваш реальный вопрос: "Как получить только ненулевые значения, возвращаемые в виде строки?" - ответ "с трудом". Это возможно, потому что функция Index может быть принудительно возвращена в массив, как в этом ответе

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

=PRODUCT(INDEX(B:D,
MATCH("Net Cashflow",$A:$A,0),
N(IF({1},SMALL(IF(INDEX(B:D,MATCH("Net Cashflow",$A:$A,0),0)<>0,COLUMN(B:D)-1),ROW(INDIRECT("1:"&COUNTIF(INDEX(B:D,MATCH("Net Cashflow",$A:$A,0),0),"<>0"))))))
))

Так что это возможно, но... на самом деле это не так.

ответил(а) 2018-08-18T16:52:00+03:00 1 год, 3 месяца назад
Еще 1 ответ
32

Вы можете использовать следующую формулу:

=IF(INDEX(B:B, MATCH("Net Cashflow", A:A, 0)) = 0, "", INDEX(B:B, MATCH("Net Cashflow", A:A, 0))&", ")&IF(INDEX(C:C, MATCH("Net Cashflow", A:A, 0)) = 0, "", INDEX(C:C, MATCH("Net Cashflow", A:A, 0))&", ")&IF(INDEX(D:D, MATCH("Net Cashflow", A:A, 0)) = 0, "", INDEX(D:D, MATCH("Net Cashflow", A:A, 0)))

Рассмотрим следующую таблицу:


  | ------------------------------------- |
| A | B | C | D |
| -------------|------|--------|--------|
1 | Net Cashflow | 0.00 | -80.00 | 500.00 |
| ------------------------------------- |

Результат формулы вернется:

-80, 500

ответил(а) 2018-08-18T00:46:00+03:00 1 год, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема