需要Excel工作表来计算复杂的度假应计和度假时间的使用
我一直在这个工作了一段时间,尝试不同的风格…我需要制定一个跟踪电子表格(50名员工),将计算累计休假时间和休假时间使用基于以下参数:
*工作时间不足3年,但与公司签订90周年纪念的员工(他们开始累计)(对此还有一点要注意……应计日是过去一个月中的第一个月90天)[我在Excel表格中计算了这个90天的项目],它将累积在: – 月底4个小时,在月底,可以存储72小时的MAX上限(但如果它们使用休假时间并低于72小时,他们可以继续累积达72小时…)
*已经工作超过3年但不足6年的员工,结束前一天的休假,从下列时间开始计算: – 每月6.8小时,月末,最高工资上限为122.4他们可以储存的小时数(但是如果他们使用休假时间并且低于122.4小时,他们可以继续累积达122.4小时…)
* 6年以上的员工在公司休假前从下列时间开始累计: – 每月10小时,每月月底,可以存储180小时的MAX上限(但是如果他们使用休假时间并低于180小时,他们可以继续累积180小时….)
是的,我需要能够扣除使用的假期时间。
有没有人有任何build议布局或公式,可以做这些function的一部分? 我感谢任何意见或build议,我还可以使用什么!
我已经创build了一张testing表,并且基于这些条件为第一条规则累积,并开始了第二套规则(3年以上)。
但是,如果我们在第一次保单的最多72小时内累计,那么如果他们使用了休假,并且再次落在72小时的上限之下,它就不会正确累加。
我知道这是一个过于复杂的政策,但这是公司想要的,他们不会让步….任何帮助或build议表示赞赏。 我知道我的表不是很棒..但是我正在尝试选项。
以下是我用于90天的等式:
=IF(F2<TODAY()-90, F2+90, "90 Day Period")
然后在我使用后的月份的第一天:
=IF(G2="90 Day Period","N/A",DATE(YEAR(G2),MONTH(G2)+1,1))
我尝试使用第一条规则的权责发生制(但它有问题…):
=IF(N2="N/A","N/A",IF(N2<=36,MIN(72,((N2*4)-P2),72),(72-P2)))
对于第二条规则:
=IF(AND(N2>36,N2<=72),MIN(122.4,((N2-36)*6.8)+Q2-S2),0)
让
- 列A EmpName
- 列B EntryDate
- 列C当天的DaysSpent
- 月底,D栏盖上Accruel缓冲区
- 每月重复C和D列
例
01-Sep-2013 01-Oct-2013 EmpName EntryDate spent buffer spent buffer ... etc ... .-------.-----------.-----------.------.-----------.------. me 01-Jan-2010 0 12 0 18.8 you 01-Jun-2013 0 4 0 4
为了不获得通心粉公式,我build议在VBA中创build一些用户定义的函数
Function GetCap(EntryDate, ThisDate) As Single Function GetMonthly(EntryDate, ThisDate) As Single
根据经验,debugging/维护2-3个嵌套的If
或Select Case
在VBA中比92个字符长的公式没有空白,表中没有注释等更容易。 如果业务逻辑发生变化,则需要查看一个代码块,而不是在一张已经增长了3×12个月x 50个用户的表中使用数十个/数百个公式。
上述function可能需要例如的帮助
Function EndOfMonth(MyDate) as Date Function BeginOfNextMonth(MyDate) as Date
所以在你的工作表中
- 手动input一个月一个月的时间
- 计算新缓冲区为
= MIN([oldbuffer] - [Spent] + GetMonthly(...), GetCap(...))
- 仔细使用相对/绝对寻址,使公式“可复制”跨列/行,例如
-
- 当向下复制时,
ThisDate
上的行是绝对的
- 当向下复制时,
-
- 在向右复制时,每个Emp的
EntryDate
上的column-absolute
- 在向右复制时,每个Emp的
您当然可以直接在工作表的单元格中使用=GetCap(...)
和=GetMonthly(...)
来显示中间结果并进行debugging。
当你比较date时要小心
提示 :
- 3年后,并不总是365×3天后
- 检查VBA DateSerial()函数在12个月和0个月以上的工作情况
-
下个月底总是比前两个月的头一天减1 …即使在闰年ggg的二月
并发布更多的问题,如果你被困在这些function。