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 €]))
将 ,
更改为本地设置的 ;
。
上下文
我正在构建一个财务仪表板,但我无法获得满足客户需求的公式。
我正在合并不同货币的金额,但对于一个特殊指标,
我需要用上个月的汇率.
类似于:
(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 €]))
将 ,
更改为本地设置的 ;
。