总和范围和减去子范围的总和
我正在计算加class费。 如果小时数大于40,则减去40。 然而,用一个单一的复制/粘贴公式 ,我想分解下来,以显示一周中的每一天有多less小时计为加class。 这是一个视觉例子:
Date | Hours | OT | -----|-------|----| Day1 | 10 | 00 | Day2 | 08 | 00 | Day3 | 18 | 00 | Day4 | 16 | 12 | OT = if SUM(B2:B5>40) then SUM(B2:B5,-40,SUM((C2:C4)*-1)) Day5 | 04 | 04 | Day6 | 08 | 08 | Day7 | 09 | 09 |
这里我最大的问题是,我并不总是想从B2
& C2
开始,我不想总是在B5
& C4
结束,因为一周重新开始,我需要知道我现在的细胞( B5
)和细胞在每周下一列-1周内( C4
)。 我需要B2
增加到B9
到B16
等,我需要C4
与 B5
增加。 即B7
和C6
, B6
和C5
等我认为OFFSET
可以工作,但我不知道如何得到它的工作,使我可以使用一个公式,而不是一个52的衍生工具。
到目前为止,我能想到的最好的公式是: =SUM(OFFSET($B$2,(ROW()-2)*7,0,7,1),-40)
它只计算整个加class周和静态B2
。
答:感谢@TomSharpe。 这些都是完美的。 select你最喜欢的一个:
抵消
=IF(MOD(ROW()-ROW($2:$2),7)=0,0,IF(SUM(OFFSET($C$2,INT((ROW()-ROW($2:$2))/7)*7,0,MOD(ROW()-ROW($2:$2),7)))=0,--TEXT(SUM(OFFSET($B$2,INT((ROW()-ROW($2:$2))/7)*7,0,MOD(ROW()-ROW($2:$2),7)+1))-40,"0;\0"),B2))
指数
=IF(MOD(ROW()-ROW($2:$2),7)=0,0,IF(SUM(INDEX(C:C,INT((ROW()-ROW($2:$2))/7)*7+2):C1)=0,--TEXT(SUM(INDEX(B:B,INT((ROW()-ROW($2:$2))/7)*7+2):B2)-40,"0;\0"),B2))
这里是一个偏移公式,每周都有加class计算。 偏移量是当前星期的开始,高度是当前星期的天数。 我终于意识到,当前一天的加class时间大于零时,当天加class只是当天工作的小时数(因为他们都是加class)。
=IF(MOD(ROW()-ROW($2:$2),7)=0,0,IF(C1=0,--TEXT(SUM(OFFSET($B$2,INT((ROW()-ROW($2:$2))/7)*7,0,MOD(ROW()-ROW($2:$2),7)+1))-40,"0;\0"),B2))
TEXT函数的使用是@Barry Houdini提出的一个技巧,当结果为负时,可以节省重复整个公式。
使用INDEX而不是OFFSET这样做会很好,而且时间允许我会看看是否可以这样做。
这里是INDEX版本 – 稍微简单些,因为范围的末尾只是B列中的当前单元格。
=IF(MOD(ROW()-ROW($2:$2),7)=0,0,IF(C1=0,--TEXT(SUM(INDEX(B:B,INT((ROW()-ROW($2:$2))/7)*7+2):B2)-40,"0;\0"),B2))
编辑
正如OP指出的那样,我忘记了工作时间为零的几天。 所以我的OFFSET公式应该是
=IF(MOD(ROW()-ROW($2:$2),7)=0,0,IF(SUM(OFFSET($C$2,INT((ROW()-ROW($2:$2))/7)*7,0,MOD(ROW()-ROW($2:$2),7)))=0,--TEXT(SUM(OFFSET($B$2,INT((ROW()-ROW($2:$2))/7)*7,0,MOD(ROW()-ROW($2:$2),7)+1))-40,"0;\0"),B2))
而我的INDEX公式应该是
=IF(MOD(ROW()-ROW($2:$2),7)=0,0,IF(SUM(INDEX(C:C,INT((ROW()-ROW($2:$2))/7)*7+2):C1)=0,--TEXT(SUM(INDEX(B:B,INT((ROW()-ROW($2:$2))/7)*7+2):B2)-40,"0;\0"),B2))
在一周的第一天工作的加class时间总是设置为零(即使你input了50个小时),但实际上你每天工作时间不能超过24小时:如果你想改变为了让整个团队工作,我认为这是另一个问题。