Формулы вложенных массивов

Я хочу суммировать ставки. Позвольте мне объяснить это: я хотел бы просуммировать числа в столбце D, которые соответствуют 2 условиям (зеленые строки в Excel). Первый: столбец F равен «закрытому». Второй: столбец C равен тем числам, которые, в свою очередь, соответствуют следующему условию: столбец F равен «Частично продано». В то же время КАЖДЫЙ номер в предыдущем суммировании можно разделить на номер столбца D, который соответствует «Частично продано» в столбце F. Вот пример с прилагаемой таблицей / рисунком: (4510/9820) + (6500 / 9820) + (9100/15400) + (2388/2995) + (12400/9820) + (2904/5855). Мои клетки будут: (D69 / D66) + (D70 / D66) + (D76 / D74) + (D82 / D78) + (D83 / D66) + (D84 / D72).

@Jeeped с вашими ячейками будет: (D6 / D3) + (D7 / D3) + (D13 / D11) + (D19 / D15) + (D20 / D3) + (D21 / D9)

..     C      D        E           F

65     #     Total    Side    Condition
66     1     9820     Buy     Partial Sold
67     2     3850     Buy     Closed
68     3     7151     Buy     Partial Sold
69     1     4510     Sell    Closed
70     1     6500     Sell    Closed
71     4     8180     Buy     Open
72     5     5855     Buy     Partial Sold
73     6     2553     Buy     Open
74     7     15400    Buy     Partial Sold
75     2     4600     Sell    Closed
76     7     9100     Sell    Closed
77     8     7531     Buy     Open
78     9     2995     Buy     Partial Sold
79     3     3000     Sell    Closed
80     10    8691     Buy     Open
81     3     2500     Sell    Closed
82     9     2388     Sell    Closed
83     1     12400    Sell    Closed
84     5     2904     Sell    Closed
85     11    3848     Buy     Open
86     12    7745     Buy     Open

person Federico    schedule 30.12.2015    source источник
comment
чтобы улучшить наши ответы, нам прямо сейчас нужно знать, есть ли вероятность, что несколько строк содержат одинаковые # и частичные продажи, и если да, то как с ними обращаться :)   -  person Dirk Reichel    schedule 30.12.2015


Ответы (3)


Чтобы сделать это за один шаг с помощью формулы массива, вы можете использовать:

=SUM(IFERROR((D66:D86*(F66:F86="Closed"))/((C66:C86=TRANSPOSE(C66:C86))*TRANSPOSE(D66:D86*(F66:F86="Partial Sold"))),0))

Это формула массива, и ее необходимо подтвердить с помощью Ctrl + Shift + Enter↵.

он сгенерирует 2D-массив, содержащий исходные значения для закрытых как строк, и разделит этот 1D-массив следующим образом:

  • строит 2D-массив по столбцу C = транспонированному столбцу C
  • умножьте каждую строку на столбец D
  • установите для всех элементов в каждой строке значение 0, если не "Частичная продажа"

для каждого div на 0 IFERROR установит его в 0
и все это в SUM даст вам ваш результат

введите здесь описание изображения

person Dirk Reichel    schedule 30.12.2015
comment
Если OP не имеет функции AGGREGATE, как указано в ответе @Jeeped, будет ли у него IFERROR()? - person Scott Craner; 30.12.2015
comment
Моя версия формулы: =SUM(IFERROR((F66:F86="Closed")*(D66:D86/SUMIFS(D66:D86,F66:F86,"Partial Sold",C66:C86,C66:C86)),0)) - person BrakNicku; 30.12.2015
comment
Скотт, у меня есть функция iferror. Дирк, Брак гениальные решения. Иногда нужен кто-то, кто думает от вос. Я был слишком погружен в проблему, чтобы думать иначе. Спасибо еще раз! - person Federico; 30.12.2015
comment
это было сделано, пока я не знал, что у него может не быть таких функций. Также я бы не рекомендовал это для больших таблиц, так как это может привести к зависанию Excel на несколько секунд или минут или даже к сбою при выполнении для целых столбцов. Лучше используйте вспомогательную колонку, чтобы разделить все на части, как упомянутый джип! - person Dirk Reichel; 30.12.2015
comment
Ага, это была моя вина. В любом случае, спасибо за ответ на вопрос. Тогда, чтобы не допустить сбоя, предпочтительнее будет разбить вещь. К настоящему времени я бы использовал матрицу foprmula. Но теперь вопрос в том, что более эффективно, решение Дирка или Брака? Я знаю, что результат такой же, но выполняют ли они одно и то же? - person Federico; 30.12.2015
comment
Я столкнулся с проблемой, когда при наличии более одного Частично проданных (столбец F) на # (столбец C) возникнут проблемы. Вот почему я прибег к делению на ПОИСКПОЗ в столбце C (сначала найти), а не на условие массива. - person ; 30.12.2015
comment
@Federico просто на вид, я бы сказал, что формула BrakNicku должна быть намного быстрее, чем моя формула ... но вы должны протестировать ее с большими таблицами, чтобы убедиться, что мое ощущение правильное. - person Dirk Reichel; 30.12.2015
comment
@Jeeped благодарит за этот комментарий, потому что на самом деле возможно, что существует более одной частичной продажи. Таким образом, формула, предложенная Браком, будет работать правильно, верно? Кто-нибудь видит какие-либо проблемы с формулой, предложенной BrakNicku? - person Federico; 30.12.2015
comment
@Federico - Брак по-прежнему использует SUMIFS($D$66:$D$86,$F$66:$F$86,"Partial Sold",$C$66:$C$86,$C$66:$C$86), который суммирует итоги из столбца D для нескольких совпадений. - person ; 30.12.2015
comment
@DirkReichel - Если я изменю строку 74 (сразу под 7 | 2553 | Купить | Частичная продажа) на 7 | 15400 | Купить | Частичная продажа Я получаю другой ответ. Если только это не главное; Я истолковал исходное повествование как означающее, что вы разделились на первое совпадение, а не на коллективное. - person ; 30.12.2015
comment
@Federico, можете ли вы дать нам еще один пример упрощенного (x / y) + (a / b) в фиктивном случае, когда у вас есть несколько значений частичной продажи для одного значения #? Я не совсем уверен, как вы хотите, чтобы он вел себя в этом сценарии. - person CactusCake; 30.12.2015
comment
@DirkReichel Я не уверен, верен ли какой-либо из результатов, которые вы предоставили в своем последнем комментарии. Не проверял, но думаю решение Jeeped даст еще один результат. Вопрос расплывчатый, поэтому я не публиковал его в качестве ответа, потому что мы до сих пор не знаем, каким должен быть ожидаемый результат. - person BrakNicku; 30.12.2015
comment
@DirkReichel, в вашем комментарии (вы удалили) есть смысл, я думал, что наши формулы эквивалентны, но вы доказали, что это не так, но мы до сих пор не знаем, каков требуемый результат. OP необходимо пояснить, что делать, если имеется несколько записей с одинаковым номером столбца C. - person BrakNicku; 30.12.2015
comment
это происходит только в том случае, если есть несколько частичных продаж ... чего не должно происходить ... нам все еще нужно что-то из OP относительно этого ... - person Dirk Reichel; 30.12.2015
comment
Привет, ребята, я использую формулу Брака. Возможна многократная частичная продажа. Я получил тот же результат с решением Jeeped, потому что оно заключается в разделении задачи на добавление столбца. Если бы несколько частичных продаж были невозможны, то подход Дирка дал бы тот же результат, что и Брак. Спасибо ребята! Я очень ценю вашу помощь ! - person Federico; 31.12.2015
comment
@BrakNicku Я предлагаю вам создать собственный ответ, который можно принять (поскольку OP использует вашу формулу в конце);) - person Dirk Reichel; 31.12.2015

Я бы тоже рекомендовал использовать вспомогательный столбец. Однако вам не нужно использовать формулы массива, чтобы найти ответ. Вы можете использовать следующее в следующем доступном столбце:

=IF(F66="Closed",IFERROR(D66/SUMIFS($D$66:$D$86,$F$66:$F$86,"Partial Sold",$C$66:$C$86,C66),0),0)

Это вернет значения для всего, что соответствует вашим критериям, и нули для всего остального. Затем вы можете просто взять сумму этого вспомогательного столбца как окончательную сумму ставок.

Excel

Если вы действительно не хотите использовать вспомогательный столбец, вы можете заключить формулу вспомогательного столбца в SUM и заменить отдельные ссылки на ячейки на массивы (например, поменять местами F66 на $F$66:$F$86 и т. Д.) , затем введите его как формулу массива с помощью Ctrl + Shift + Enter↵. Все это выглядело бы так:

=SUM(IF($F$66:$F$86="Closed",IFERROR($D$66:$D$86/SUMIFS($D$66:$D$86,$F$66:$F$86,"Partial Sold",$C$66:$C$86,$C$66:$C$86),0),0))
person CactusCake    schedule 30.12.2015

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

=IF(AND(OR(C66=INDEX(C$66:C$86*(F$66:F$86="Partial Sold"), , )), F66="Closed"), D66/INDEX(D$66:D$86, AGGREGATE(15, 6, ROW($1:$21)/((C$66:C$86=C66)*(F$66:F$86="Partial Sold")), 1)), "")

При необходимости долейте. Результатом будет сумма этих «вспомогательных» чисел.

helper_sum_column

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


¹ Формулы массива должны быть завершены с помощью Ctrl + Shift + Enter↵. После правильного ввода в первую ячейку их можно заполнить или скопировать вниз или вправо, как и любую другую формулу. Попробуйте сократить количество ссылок на весь столбец до диапазонов, более точно представляющих объем ваших фактических данных. Формулы массива логарифмически перебирают циклы вычислений, поэтому рекомендуется сузить указанные диапазоны до минимума. См. Рекомендации и примеры формул массива для получения дополнительной информации.

person Community    schedule 30.12.2015
comment
Поскольку моя версия Excel немного устарела, у меня нет полезной функции AGGREGATE. Позвольте спросить, какая разница, если я воспользуюсь этой формулой вместо вашей? =IF(AND(OR(C66=INDEX(C$66:C$86*(F$66:F$86="Partial Sold"),,)),F66="Closed"),D66/SUMIFS(D$66:D$86,C$66:C$86,C66,F$66:F$86,"Partial Sold"),"") Надеюсь, теперь с форматированием все в порядке ... - person Federico; 30.12.2015
comment
Я не вижу, чтобы это было сделано без вспомогательной колонки. - ›задача выполнена: P - person Dirk Reichel; 30.12.2015