Excel函数计算成对date差异

我和我公司的所有员工都有一张表格。 这个清单还包括每个员工的病假。 我想计算每年的病假。

我的Excel表看起来像这样(缩短版本):

ABCDEFG ... 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生病,菲尔没有生病。

现在,我想计算一年的病假。 我可以做类似的事情

  AB 10 2015 Sum of sick days in 2015 11 2016 Sum of sick days in 2016 

所以需要做的是:

  1. 检查date是否在正确的一年
  2. 对于2016年的所有date的networking日的成对计算,这意味着= 2015(SUMWORK(NETWORKDAYS(B2; C2))和= SUM(NETWORKDAYS(D2; E2); NETWORKDAYS(B3; C3))。

但它应该更加dynamic地工作。 我只想selectmatrix,例如每年A1到I8,其余的应该自动计算。 有人知道我能做到吗?

你可以使用下面的公式。 (粘贴在单元格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中。 它应该工作。

以下似乎相当不羁:

 =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)) 

或者,您可以编写macros来循环访问数据, 可以在FromTo列之间添加另外两列。 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) 

这些新的列可以隐藏,如果你需要的话。