Excel VBA - OT小时跨越两个支付期 - 如何自动计算

时间:2017-03-21 22:13:31

标签: excel-vba excel-formula vba excel

我在回答的问题档案中找不到任何解决此问题的内容。 我对Excel非常好,但这让我很沮丧。 我的任务是改进办公室员工用来跟踪正常工作时间,加班时间和各种带薪休假的工具。 我在整个事情上有一个很好的开始,但因为公司的工资期是双月的(1至15日和16日到EOM)我遇到困难自动计算工作周时支付的OT时数(对于OT)跨越两个支付期。 我有一个列显示星期几(星期一= 2,星期二= 3等),我试图弄清楚如何查看Day列并计算Day2-Day6小时的所有实例以获得OT小时(如果有的话 - 我有一个公式)在当前的支付期内支付。如果新的支付期没有在星期一开始,我需要回顾新的支付期的开始。 电子表格具有先前的支付期以及当前的支付期 我肯定会感激任何建议。 祝你有个美好的一天 - Lynda

以下是数据:

DayofWeek; Date; StartTime; EndTime; Lunch; Hours@Work; FringeType; FringeHours; TotalPayHours; WeeklyOTHrs (these are the column headers)
5 Thursday, March 16, 2017 7:30 17:00 1 8.50 8.50 
6 Friday, March 17, 2017 8:00 16:30 0.5 8.00 8.00 12.00 
2 Monday, March 20, 2017 7:30 17:00 1 8.50 H 8 16.50 
3 Tuesday, March 21, 2017 8:10 16:30 1 7.33 7.33 
4 Wednesday, March 22, 2017 8:00 17:00 1 8.00 V 8 16.00 
5 Thursday, March 23, 2017 8:00 17:30 0.5 9.00 9.00 
6 Friday, March 24, 2017 7:40 17:00 1 8.33 8.33 1.17 

我现在在OT细胞中有一个公式:

=IF($B30=6,IF(SUM(G26:G30)>40,SUM(G26:G30)-40,""),"") 

1 个答案:

答案 0 :(得分:0)

以下两个选项可能会有所帮助,两者都使用SUMIFS功能。第一个选项需要的代码较少,但要求在数据表外的单元格中定义相应时段的开始和结束日期。

选项1。 如果您对每个支付期间的总计感兴趣,您可以跳过OT列,而是计算数据表外的总数。这是一个只有3列的例子。在屏幕截图中,B5包含以下公式:

    =SUMIFS($C$12:$C$33,$A$12:$A$33,">="&$B$3,$A$12:$A$33,"<="&$B$4)

如果它们在单元格B3和B4中指定的上一期间的日期内,则SUMIFS对C列中的所有值求和。

类似地,B9包含当前时期的公式,由单元格B7和B8定义:

   =SUMIFS($C$12:$C$33,$A$12:$A$33,">="&$B$7,$A$12:$A$33,"<="&$B$8)

Total sums separate from data table. Static date reference.

选项2。 如果要跟踪每个时段中的累计 OT小时数,可以保留OT列并添加上述公式的变体。在这个例子中,我添加了两个额外的列来定义句点的开始和结束(这使公式更漂亮;如果你不想要额外的列,这些公式可以合并到D列的公式中)。

在此屏幕截图中,D3包含以下公式:

=SUMIFS($C$3:$C3,$A$3:$A3,">="&E3,$A$3:$A3,"<="&F3)

这与选项1中的公式基本相同,但每行的范围都会增加,因此D4包含:

=SUMIFS($C$3:$C4,$A$3:$A4,">="&E3,$A$3:$A4,"<="&F3)

此外,期间的开始日期和结束日期是动态的,包含在E和F列中。公式检查当前日期是在月份的前半部分还是后半部分,并相应地调整开始日期和结束日期。

开始日期(单元格E3):

=IF(A3<=DATE(YEAR(A3),MONTH(A3),15),DATE(YEAR(A3),MONTH(A3),1),DATE(YEAR(A3),MONTH(A3),16))

结束日期(单元格F3):

=IF(A3<=DATE(YEAR(A3),MONTH(A3),15),DATE(YEAR(A3),MONTH(A3),15),EOMONTH(A3,0))

Accumulated total. Dynamic date references.

注意:如果您想避免使用额外的列,可以将E和F列合并到D中,以便单元格D3包含:

=SUMIFS($C$3:$C3,$A$3:$A3,">="&IF(A3<=DATE(YEAR(A3),MONTH(A3),15),DATE(YEAR(A3),MONTH(A3),1),DATE(YEAR(A3),MONTH(A3),16)),$A$3:$A3,"<="&IF(A3<=DATE(YEAR(A3),MONTH(A3),15),DATE(YEAR(A3),MONTH(A3),15),EOMONTH(A3,0)))