我和我公司的所有员工都有一张excel表。此列表还包括每位员工的病假。我想计算每年的病假。
我的Excel工作表看起来像这样(缩短版):
A B C D E F G ...
1 Name From To From To From To ...
2 Max 2015/06/15 2015/06/16 2016/08/17 2016/08/17
3 Sarah 2016/01/20 2016/01/20
4 Phil
...
说明:马克斯病了两次。首先是2015/06/15至2015/06/16,第二次是2016/08/17至2016/08/17。每当他生病时,桌子就会向右扩展。莎拉只在2016/01/20生病,而菲尔并没有生病。
现在,我想计算一年的病假。 我可以做类似
的事情 A B
10 2015 Sum of sick days in 2015
11 2016 Sum of sick days in 2016
所以需要做的是:
但它应该更加动态。我只想选择矩阵,例如每年A1至I8,其余应自动计算。有人知道我该怎么做吗?
答案 0 :(得分:1)
您可以使用以下公式。 (将其粘贴在单元格B10中
=SUMPRODUCT((YEAR($B$2:$N$8)=$A10)*(MOD(COLUMN($B$2:$N$8),2)=0)*(($C$2:$O$8-$B$2:$N$8)+1))
将上述单元格复制到B11中。它应该工作。
答案 1 :(得分:0)
以下似乎非常不守规矩:
=IF(YEAR(C2)=A10,NETWORKDAYS(B2,C2))+IF(YEAR(G2)=A10,NETWORKDAYS(F2,G2))+IF(YEAR(K2)=A10,NETWORKDAYS(J2,K2))+IF(YEAR(C3)=A10,NETWORKDAYS(B3,C3))+IF(YEAR(G3)=A10,NETWORKDAYS(F3,G3))+IF(YEAR(K3)=A10,NETWORKDAYS(J3,K3))+IF(YEAR(C4)=A10,NETWORKDAYS(B4,C4))+IF(YEAR(G4)=A10,NETWORKDAYS(F4,G4))+IF(YEAR(K4)=A10,NETWORKDAYS(J4,K4))
或者,您可以编写一个宏来遍历数据或在每个 From 和 To 列之间添加另外两列。 D2将是
=IF(ISBLANK(C2),"",YEAR(C2))
并复制下来。 E2将是
=IF(ISBLANK(C2),"",NETWORKDAYS(B2,C2))
并复制下来。 E11将是
=SUMIF(D2:D4,$A11,E2:E4)
并复制到I11和M11等。然后你可以
=SUM(C11:M11)
如果需要,可以隐藏这些新列。