IFERROR
имеет формат IFERROR(Value, Value_if_error)
. Ваш Value
это:
IF(core!$D$11=1;IF($F15>0;IF(core!$D$7="TL";IF(core!$H29="TL";core!$I29+core!$I29*core!$F29+core!$I29*core!$g29;IF(core!$H29="USD";core!$I29*core!$N$2+core!$I29*core!$N$2*core!$F29+core!$I29*core!$N$2*core!$g29;IF(core!$H29="EURO";core!$I29*core!$N$3+core!$I29*core!$N$3*core!$F29+core!$I29*core!$N$3*core!$g29;"")));IF(core!$D$11=1;IF($F15>0;IF(core!$D$7="USD";IF(core!$H29="TL";core!$I29/core!$N$2+core!$I29/core!$N$2*core!$F29+core!$I29/core!$N$2*core!$g29;IF(core!$H29="USD";core!$I29+core!$I29*core!$F29+core!$I29*core!$g29;IF(core!$H29="EURO";core!$I29*core!$N$3/core!$N$2+core!$I29*core!$N$3/core!$N$2*core!$F29+core!$I29*core!$N$3/core!$N$2*core!$g29;"")));IF(core!$D$11=1;IF($F15>0;IF(core!$D$7="EURO";IF(core!$H29="TL";(core!$I29/core!$N$3+core!$I29/core!$N$3*core!$F29+core!$I29/core!$N$3*core!$g29);IF(core!$H29="USD";(core!$I29*core!$N$2/core!$N$3+core!$I29*core!$N$2/core!$N$3*core!$F29+core!$I29*core!$N$2/core!$N$3*core!$g29);IF(core!$H29="EURO";core!$I29+core!$I29*core!$F29+core!$I29*core!$g29;""))))))))))));
Взяв вашу формулу, разделив первую часть IFERROR
и исключив ложный код (т.е. IF(A=1, IF(B=2, IF(A=1, ALWAYS_TRUE, ALWAYS_FALSE), C), D)
функционально идентичен IF(A=1, IF(B=2, ALWAYS_TRUE, C), D)
), Затем я построил следующую таблицу:
Красный, синий и зеленый текст - это общие термины, присутствующие в каждой формуле.
Изучив это и немного переставив, я обнаружил следующие закономерности:
- Когда D7 равен «USD», разделить на $ N $ 2
- Когда D7 равен «EURO», разделить на $ N $ 3
- Когда H29 равно «USD», умножьте на $ N $ 2
- Когда H29 равно «EURO», умножьте на $ N $ 3
Неявно, также существуют следующие правила:
Когда D7 - TL, разделить на 1
Когда H29 равно TL, умножить на 1
Я могу использовать VLOOKUP
, чтобы выбрать, какие ячейки использовать, в результате получается форма VLOOKUP(H29,..) * (Common_Terms) / VLOOKUP(D7,..)
Это позволяет мне переписать ваш Value
следующим образом :
IF(AND(core!$D$11=1,$F15>0), IF(AND(MATCH(core!$D$11,{"TL","USD","EURO","*"},0)<4, MATCH(core!$H$29,{"TL","USD","EURO","*"},0)<4), VLOOKUP(core!H$29,{"USD",core!$N$2;"Euro",core!$N$3;"TL",1},2,FALSE)*(core!$I29 + core!$I29*core!$F29 + core!$I29*core!$g29)/VLOOKUP(core!H$29,{"USD",core!$N$2;"Euro",core!$N$3;"TL",1},2,FALSE), ""), FALSE)
Это t hird длины. Вы должны иметь возможность управлять подобной оптимизацией почти каждого IF
условия, которое у вас есть.
Что еще более важно, партия ваших повторяющихся (и ненужных) IF
условий проверяет, проверяется ли H29 и D7 равны «TL» / «USD» / «EUR», или проверка того, что F15> 0. Вы можете устранить их, сделав свой крайний IF
оператор следующим образом:
=IF(AND($F15>0, MATCH(core!$D$7, core!$D$11, {"TL","USD","EURO","*"},0)<4, MATCH(core!$H$29, {"TL","USD","EURO","*"},0)<4), ALL_THREE_CONTITIONS_ARE_TRUE, "")