Excel CSE公式对应用于所有行的复杂公式的结果求和

Excel CSE公式对应用于所有行的复杂公式的结果求和,excel,excel-formula,Excel,Excel Formula,我有以下三个表格(表格标题在第01行): 表1:基于日期的订阅 | A | B | C | D | ---|-----------|--------------|------------|---------------------| 01 | ID | Type | Start Date | End Date | 02 | ID1 |

我有以下三个表格(表格标题在第01行):

表1:基于日期的订阅

   | 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?Does
SUMIFS()
help?您的开始日期和结束日期是否为正确识别的Excel日期格式?您可以使用ISNUMBER进行测试,对于这些单元格,ISNUMBER应该返回TRUE。另外,什么是17.4.1?17/04/2001?如果我理解您的逻辑,那么2020年应该是12个月+7个月(包括6月到12月)。你的T2是120,但在下一步中,你在做数学运算,就好像它是12。@Xidegel确实,谢谢,我已经更新了问题。它像一个符咒一样工作,非常感谢。我将能够摆脱一个讨厌的助手表。它像一个符咒一样工作,非常感谢。我将能够摆脱一个讨厌的助手表。