Excel 数组公式,使用一个 IF 结果的信息作为另一个 IF 的条件?

Excel Array formula, use info from one IF result as criteria in another IF?

上下文

我正在构建一个财务仪表板,但我无法获得满足客户需求的公式。

我正在合并不同货币的金额,但对于一个特殊指标,
我需要用上个月的汇率.

建立一个 YTD

类似于:

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

(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]

但两者都出错(我在 table Named_Rg 之外使用该公式)

我知道我可以在 VBA 中编写函数,但我更愿意保留 xlsx.


我的公式

我删除了一些与问题无关的测试,例如测试年份。

我在另一个 sheet 上使用它 table Named_Rg 是:

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

如何在第二个中引用第一个 IF 找到的 Row/Currency?

示例数据

这只是一个示例,每个月和货币会有多个行。

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

预期结果:

YTD 上次更改(一月):118 = 20*1+30*0.6+40*2
YTD 上次更改(2 月):1419 = (20+200)*1+(30+300)*0.7+(40+400)*2.2
YTD 最后一次更改(3 月):15540 = (20+200+2000)*1+(30+300+3000)*0.8+(40+400+4000)*2.4

数组公式不喜欢 AND()OR() 运算符。它们需要分别替换为 *+

所以你的:

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

应该是:

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

所以公式为:

=SUM(IF(Named_Rg[Month]<=MONTH(X);Named_Rg[Amount]*IF((Named_Rg[Month]=MONTH(X))*(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 €]))

, 更改为本地设置的 ;