Формула массива Excel, использовать информацию из одного результата ЕСЛИ в качестве критерия в другом ЕСЛИ?

Контекст

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

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

Что-то типа :

(Amount_$_Jan + Amount_$_Feb)*ExRate_$_Feb + (Amount_£_Jan + Amount_£_Feb)*ExRate_£_Feb

OR

(Amount_$_Jan + Amount_$_Feb + Amount_$_Mar)*ExRate_$_Mar + (Amount_£_Jan + Amount_£_Feb + Amount_£_Mar)*ExRate_£_Mar

Моя проблема

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

Я пытаюсь :

  • получить значение валюты каждой строки, которое соответствует критериям первого IF
  • чтобы использовать его во втором IF, чтобы найти диапазон обмена для этой валюты
    за месяц, на который я рассчитываю,
    с: Named_Rg[Currency]=Named_Rg[Currency]

что очевидно всегда верно, но это единственный синтаксис, который я пробовал проверить ...

Я пробовал :

  • Named_Rg[Currency]=[@[Currency]]
  • Named_Rg[Currency]=[Currency]

Но оба дают ошибки (я использую эту формулу вне таблицы Named_Rg)

Я знаю, что могу написать функцию на VBA, но я бы предпочел оставить xlsx.


Моя формула

Я удалил некоторые тесты, такие как тестирование года, которые не имеют отношения к вопросу.

Я использую его на другом листе, где находится таблица Named_Rg:

{=SUM(IF(Named_Rg[Month]<=MONTH(X$5);Named_Rg[Amount]*IF(AND(Named_Rg[Month]=MONTH(X$5);Named_Rg[Currency]=Named_Rg[Currency]);Named_Rg[Chg to €];0);0))}

Как я могу сослаться на найденную строку / валюту с первым IF во втором?

Пример данных

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

Year    Month   Currency    Chg to €    Amount
2017    1       EUR         1           20
2017    1       USD         0.6         30
2017    1       LST         2           40
2017    2       EUR         1           200
2017    2       USD         0.7         300
2017    2       LST         2.2         400
2017    3       EUR         1           2000
2017    3       USD         0.8         3000
2017    3       LST         2.4         4000

Формат CSV:

Year;Month;Currency;Chg to €;Amount
2017;1;EUR;1;20
2017;1;USD;0.6;30
2017;1;LST;2;40
2017;2;EUR;1;200
2017;2;USD;0.7;300
2017;2;LST;2.2;400
2017;3;EUR;1;2000
2017;3;USD;0.8;3000
2017;3;LST;2.4;4000

Ожидаемые результаты :

Последнее изменение с начала года (январь): 118 = 20 * 1 + 30 * 0,6 + 40 * 2
Последнее изменение с начала года (фев): 1419 = (20 + 200 ) * 1 + (30 + 300) * 0,7 + (40 + 400) * 2,2
Последнее изменение с начала года (март): 15540 = (20 + 200 + 2000) * 1 + (30 + 300 + 3000) * 0,8 + (40 + 400 + 4000) * 2,4


person R3uK    schedule 28.02.2017    source источник
comment
Можете ли вы опубликовать снимок экрана рабочего листа (и показать, где находятся именованные диапазоны)? Я никогда не слышал о формуле Excel "MOIS", это неправильно?   -  person z32a7ul    schedule 28.02.2017
comment
Что означает [@ [Currency]]?   -  person z32a7ul    schedule 28.02.2017
comment
@ z32a7ul: Я просто забыл поменять на английском, MOIS это MONTH. Прямо сейчас делаю образец данных. Что касается [@[Currency]], создайте таблицу и создайте там формулу, это относится к столбцу по имени внутри этой таблицы.   -  person R3uK    schedule 28.02.2017
comment
Можете ли вы также опубликовать что-нибудь о желаемом результате? Я не понимаю, будет ли это отдельная ячейка или таблица. Какова логика умножения суммы января + февраля на курс февраля вместо января * января + февраля * февраля? Чем ты занимаешься в Мар? Янв + Фев + Мар или Фев + Мар или Янв + Мар?   -  person z32a7ul    schedule 28.02.2017
comment
@ z32a7ul: Смотрите редактирование! ;) Я тоже не вижу логики, но это обязательный финансовый показатель, который задают регулирующие органы.   -  person R3uK    schedule 28.02.2017
comment
Если вручную, используя данные, опубликуйте формулу, которую вы использовали для получения января; как ((20+30+40)*1)+(..., чтобы я мог лучше понять вашу формулу.   -  person Scott Craner    schedule 28.02.2017
comment
@ScottCraner: Готово, я также добавил буквальный пример для марта в начале сообщения.   -  person R3uK    schedule 28.02.2017


Ответы (1)


Формула массива не любит операторы AND() и OR(). Их нужно заменить на * или + соответственно.

Так что ваши:

AND(Named_Rg[Month]=MONTH(X$5);Named_Rg[Currency]=Named_Rg[Currency])

Должно быть:

(Named_Rg[Month]=MONTH(X$5))*(Named_Rg[Currency]=Named_Rg[@Currency])

Итак, формула будет такой:

=SUM(IF(Named_Rg[Month]<=MONTH(X$5);Named_Rg[Amount]*IF((Named_Rg[Month]=MONTH(X$5))*(Named_Rg[Currency]=Named_Rg[@Currency]);Named_Rg[Chg to €])))

Помните, что это формула массива, и ее необходимо подтвердить с помощью Ctrl-Shift-Enter.

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


Но я думаю, вам нужна эта формула, чтобы получить желаемый результат:

=SUMPRODUCT(SUMIFS(Named_Rg[Amount],Named_Rg[Month],"<=" & MONTH(X5),Named_Rg[Currency],Named_Rg[Currency])*(Named_Rg[Month]=MONTH(X5))*(Named_Rg[Chg to €]))

Измените , на свой ; для своих локальных настроек.

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

person Scott Craner    schedule 28.02.2017
comment
Спасибо, действительно проверка формулы, AND не было хорошим решением. Но я получаю #VALUE за _3 _...: / - person R3uK; 28.02.2017
comment
Трудно проверить, почему без тестовых данных. @ R3uK - person Scott Craner; 28.02.2017
comment
Вы предпочитаете файл или базовую таблицу для его воспроизведения? - person R3uK; 28.02.2017
comment
базовая таблица @ R3uK - person Scott Craner; 28.02.2017
comment
Хорошо, так что было слишком много [], я пытаюсь использовать его вот так, но мой заголовок на самом деле Entity Currency, и [] возвращается автоматически, когда я подтверждаю с помощью Ctrl + Shift + Enter. Я пробую ваше решение с моим образцом (я отредактировал свой вопрос, чтобы включить его!) - person R3uK; 28.02.2017
comment
Что-то подсказывает мне, что у вас неправильная формула, см. Edit @ R3uK - person Scott Craner; 28.02.2017
comment
Я пробовал предыдущую формулу, я все равно получаю сообщение об ошибке, если я не использую ее в той же строке, что и таблица, а Named_Rg[@Currency] всегда возвращает валюту из строки, в которую введена формула (а не валюту из 1-й ЕСЛИ) ... Я попробую вашу другую формулу, но думаю, это будет та же проблема. - person R3uK; 28.02.2017
comment
Та же проблема, что и раньше (я, вероятно, не достаточно ясно ответил на свой вопрос). Кроме того, я не могу использовать вашу формулу, так как она суммирует обменные курсы, а у меня есть несколько строк для комбинации «Месяц / Валюта / Сущность». - person R3uK; 28.02.2017
comment
Да, это ограничение использования структурированных ссылок. Вам нужно будет изменить Named_Rg[@Currency] на ссылку на ячейку, поэтому в моем случае G2 @ r3uk - person Scott Craner; 28.02.2017
comment
Он не суммировал обменные курсы, он нашел только тот, который соответствует тому месяцу в X5. Я использовал СУММЕСЛИ, потому что это было проще и не требовало формулы массива. - person Scott Craner; 28.02.2017
comment
Хорошо, я определенно не совсем ясно ответил на свой вопрос! Я не могу использовать Cell Ref, так как я хочу получить значение валюты из строк результатов первого if ... Чтобы применить хороший обменный курс относительно валюты каждой строки, соответствующей первому набору критериев (‹ = Месяц). Это понятнее? - person R3uK; 28.02.2017
comment
Каковы ваши ожидаемые результаты? Пожалуйста, поместите их в исходный пост. - person Scott Craner; 28.02.2017
comment
Я добавил ожидаемые результаты, но учтите, что у меня будет несколько строк в месяц / валюту. - person R3uK; 28.02.2017
comment
Ты такой классный! :) Хороший обходной путь, я скоро протестирую его с большим набором данных, но, судя по структуре, я почти уверен, что это сработает! Я немного озадачен этим тестом Named_Rg[Currency],Named_Rg[Currency] в SUMIFS, это то, что позволяет сохранить массив в результате SUMIFS? - person R3uK; 28.02.2017
comment
Суммарное произведение заставляет его перебирать весь список, поэтому второй критерий - это критерий, который идет один за другим. @ R3uK - person Scott Craner; 28.02.2017
comment
Я так и думал, но я бы никогда не совмещал эти функции самостоятельно. Я был просто озадачен оценкой формулы, которая не очень понятна! Большое спасибо за вашу суперценную информацию, как всегда! ;) - person R3uK; 28.02.2017