Excel CSE公式对应用于所有行的复杂公式的结果求和
我有以下三个表格(表格标题在第01行): 表1:基于日期的订阅Excel CSE公式对应用于所有行的复杂公式的结果求和,excel,excel-formula,Excel,Excel Formula,我有以下三个表格(表格标题在第01行): 表1:基于日期的订阅 | A | B | C | D | ---|-----------|--------------|------------|---------------------| 01 | ID | Type | Start Date | End Date | 02 | ID1 |
| A | B | C | D |
---|-----------|--------------|------------|---------------------|
01 | ID | Type | Start Date | End Date |
02 | ID1 | T1 | 17.4.1 | |
03 | ID2 | T2 | 17.9.1 | 18.5.15 |
04 | ID3 | T1 | 20.6.1 | |
...
表2:每种订阅类型的每月成本
| A | B
---|-------------|---------------
01 | Type | Yearly Cost
02 | T1 | 120
03 | T2 | 144
...
表3:费用预测
| A | B
---|-----------|------------
01 | Year | Expense s
02 | 2017 | 138 (T1 9 months: 90 + T2 4 months: 48)
03 | 2018 | 180 (T1 12 months: 120 + T2 5 months 60)
04 | 2019 | 120 (T1 12 months)
05 | 2020 | 190 (T1 12 months + 7 months)
06 | 2021 | 1240 (T1 24 months)
...
| J | K | L | M | N ...
---|-------|----|------|-----| ----- ...
01 | Year | | ID1 | ID2 | ID3
02 | 2017 | | 90 | 48 |
03 | 2018 | | 120 | 60 |
04 | 2019 | | 120 | 0 |
05 | 2020 | | 190 | |
...
我想自动计算第三个表的B列(不使用helper列,目前是使用helper表完成的…)
我知道不能使用sumif()来完成,但是可以使用数组公式来实现吗
我将公式的以下伪代码放在表3中:
for each line of table 2
'
'
' case 1: start date in year, end date not in year
'
if and(table3[year]=year(table1[startdate]), or(isblank(year(table1[enddate]),table3[year] < year(table1[enddate]))) then
'
' count months from startdate to end of year then multiply with monthlyrate
'
addtosum (12-month(table1[startdate]))*index(Table2,match(Table1[@[Type]],Table2[Type],0),2)
'
'
' case 2: startdate in year, enddate in year
'
elseif and(table3[year]=year(table1[startdate]),table3[year] = year(table1[enddate])) then
'
' count months between startdate and enddate then multiply with monthlyrate
'
addtosum (month(table1[enddate])-month(table1[startdate]))*index(Table2,match(Table1[@[Type]],Table2[Type],0),2)
'
'
' case 3: year larger than startdate, enddate is not reached
'
elseif and(table3[year]>year(table1[startdate]), or(isblank(year(table1[enddate]),table3[year]<year(table1[enddate]))) then
'
' multiply 12 months with monthlyrate
'
addtosum 12*index(Table2,match(Table1[@[Type]],Table2[Type],0),2)
'
'
' case 4: year larger than startdate, enddate is reached
'
elseif and(table3[year]>year(table1[startdate]),table3[year]=year(table1[enddate])) then
'
' count months from begining of year to enddate then multiply with monthlyrate
'
addtosum (month(table1[enddate])) * index(Table2,match(Table1[@[Type]],Table2[Type],0),2)
end if
end for each
这是我目前在L2单元中的公式(复制到L2:U5):
'注意:调用索引时,第4列为类型,第5列为开始日期,第6列为结束日期)
=如果(不为空(索引(表1,匹配(L$1,表1[ID],0),5)),
如果(和($J2=年(索引(表1,匹配(L$1,表1[ID],0),5)),或(是空白的(索引(表1,匹配(L$1,表1[ID],0),6)),$J2<年(索引(表1,匹配(L$1,表1[ID],0),6)),
(12+1个月(指数(表1,匹配(L$1,表1[ID],0),5)),
如果($J2=年(索引(表1,匹配(L$1,表1[ID],0),5)),$J2=年(索引(表1,匹配(L$1,表1[ID],0),6)),
(月(指数(表1,匹配项(L$1,表1[ID],0),6))-月(指数(表1,匹配项(L$1,表1[ID],0),5)),
如果(和($J2>年(索引(表1,匹配(L$1,表1[ID],0),5)),或(是空白(索引(表1,匹配(L$1,表1[ID],0),6)),$J2<年(索引(表1,匹配(L$1,表1[ID],0),6)),
12,
如果($J2>年(索引(表1,匹配(L$1,表1[ID],0),5)),$J2=年(索引(表1,匹配(L$1,表1[ID],0),6)),
(月份(指数(表1,匹配项(L$1,表1[ID],0),6)),
0
)
)
)
)*索引(表2,匹配(索引(表1,匹配(L$1,表1[ID],0),4),表2[Type],0),2)/12,
0
)
提前感谢您的帮助,您要的是配方奶粉。使用以下数组公式:
=SUMPRODUCT(((J2>=YEAR($C$2:$C$4))*((J2<=YEAR($D$2:$D$4))+($D$2:$D$4=""))),
SUMIFS($G$2:$G$3,$F$2:$F$3,$B$2:$B$4),
((DATEDIF(IF($C$2:$C$4>DATE(J2,12,31),0,$C$2:$C$4),DATE(J2,12,31),"m")+1>12)*12-IF($D$2:$D$4<>"",MONTH(D1:D3)+2,0))+
(DATEDIF(IF($C$2:$C$4>DATE(J2,12,31),0,$C$2:$C$4),DATE(J2,12,31),"m")+1<=12)*
((DATEDIF(IF($C$2:$C$4>DATE(J2,12,31),0,$C$2:$C$4),DATE(J2,12,31),"m")+1)--IF($D$2:$D$4<>"",MONTH(D1:D3)+2,0)))
=SUMPRODUCT((J2>=年($C$2:$C$4))*((J2DATE(J2,12,31),0,$C$2:$C$4),日期(J2,12,31),“m”)+1>12)*12-IF($D$2:$D$4“,月(D1:D3)+2,0))+
(DATEDIF(如果($C$2:$C$4>DATE(J2,12,31),0,$C$2:$C$4),DATE(J2,12,31),“m”)+1日期(J2,12,31),0,$C$2:$C$4),DATE(J2,12,31),“m”)+1——如果($D$2:$D$4“,月(D1:D3)+2,0)))
作为数组公式,必须在退出编辑模式时使用Ctrl-Shift-Enter而不是Enter确认
您要的是配方奶粉。使用以下数组公式:
=SUMPRODUCT(((J2>=YEAR($C$2:$C$4))*((J2<=YEAR($D$2:$D$4))+($D$2:$D$4=""))),
SUMIFS($G$2:$G$3,$F$2:$F$3,$B$2:$B$4),
((DATEDIF(IF($C$2:$C$4>DATE(J2,12,31),0,$C$2:$C$4),DATE(J2,12,31),"m")+1>12)*12-IF($D$2:$D$4<>"",MONTH(D1:D3)+2,0))+
(DATEDIF(IF($C$2:$C$4>DATE(J2,12,31),0,$C$2:$C$4),DATE(J2,12,31),"m")+1<=12)*
((DATEDIF(IF($C$2:$C$4>DATE(J2,12,31),0,$C$2:$C$4),DATE(J2,12,31),"m")+1)--IF($D$2:$D$4<>"",MONTH(D1:D3)+2,0)))
=SUMPRODUCT((J2>=年($C$2:$C$4))*((J2DATE(J2,12,31),0,$C$2:$C$4),日期(J2,12,31),“m”)+1>12)*12-IF($D$2:$D$4“,月(D1:D3)+2,0))+
(DATEDIF(如果($C$2:$C$4>DATE(J2,12,31),0,$C$2:$C$4),DATE(J2,12,31),“m”)+1日期(J2,12,31),0,$C$2:$C$4),DATE(J2,12,31),“m”)+1——如果($D$2:$D$4“,月(D1:D3)+2,0)))
作为数组公式,必须在退出编辑模式时使用Ctrl-Shift-Enter而不是Enter确认
这里有另一个解决方案:
=SUM(IF(ISBLANK(Table1[End Date]),IF(YEAR(Table1[Start Date])<Table3[@Year],12,IF(YEAR(Table1[Start Date])=Table3[@Year],13-MONTH(Table1[Start Date]),0)),IF(Table3[@Year]<YEAR(Table1[Start Date]),0,IF(Table3[@Year]=YEAR(Table1[Start Date]),IF(Table3[@Year]<YEAR(Table1[End Date]),13-MONTH(Table1[Start Date]),IF(Table3[@Year]=YEAR(Table1[End Date]),MONTH(Table1[End Date])-MONTH(Table1[Start Date])+1,0)),IF(Table3[@Year]<YEAR(Table1[End Date]),12,IF(Table3[@Year]=YEAR(Table1[End Date]),MONTH(Table1[End Date]),0)))))*SUMIFS(Table2[Monthly Cost],Table2[Type],Table1[Type]))
=SUM(如果为空(表1[结束日期]),如果为年(表1[开始日期])这里是另一个解决方案:
=SUM(IF(ISBLANK(Table1[End Date]),IF(YEAR(Table1[Start Date])<Table3[@Year],12,IF(YEAR(Table1[Start Date])=Table3[@Year],13-MONTH(Table1[Start Date]),0)),IF(Table3[@Year]<YEAR(Table1[Start Date]),0,IF(Table3[@Year]=YEAR(Table1[Start Date]),IF(Table3[@Year]<YEAR(Table1[End Date]),13-MONTH(Table1[Start Date]),IF(Table3[@Year]=YEAR(Table1[End Date]),MONTH(Table1[End Date])-MONTH(Table1[Start Date])+1,0)),IF(Table3[@Year]<YEAR(Table1[End Date]),12,IF(Table3[@Year]=YEAR(Table1[End Date]),MONTH(Table1[End Date]),0)))))*SUMIFS(Table2[Monthly Cost],Table2[Type],Table1[Type]))
=SUM(IF(ISBLANK)(Table1[结束日期])、IF(YEAR)(Table1[开始日期])你介意稍微清理一下你的伪代码吗?有很多空格让人很难理解。另外,你有没有尝试过VBA?有没有SUMIFS()
help?您的开始日期和结束日期是否为正确识别的Excel日期格式?您可以使用ISNUMBER进行测试,对于这些单元格,ISNUMBER应该返回TRUE。另外,什么是17.4.1?17/04/2001?如果我理解您的逻辑,那么2020年应该是12个月+7个月(包括6月到12月)。你的T2是120,但在接下来的计算中,你的计算好像是12。@Xidegel的确,谢谢,我已经更新了这个问题。你介意稍微清理一下你的伪代码吗?有很多空格,这让人很难理解。另外,你有没有尝试过VBA?DoesSUMIFS()
help?您的开始日期和结束日期是否为正确识别的Excel日期格式?您可以使用ISNUMBER进行测试,对于这些单元格,ISNUMBER应该返回TRUE。另外,什么是17.4.1?17/04/2001?如果我理解您的逻辑,那么2020年应该是12个月+7个月(包括6月到12月)。你的T2是120,但在下一步中,你在做数学运算,就好像它是12。@Xidegel确实,谢谢,我已经更新了问题。它像一个符咒一样工作,非常感谢。我将能够摆脱一个讨厌的助手表。它像一个符咒一样工作,非常感谢。我将能够摆脱一个讨厌的助手表。