繁体   English   中英

需要Excel工作表来计算复杂的假期应计和假期时间的使用

[英]Need Excel Sheet to Calculate Complex Vacation Accrual and Use of Vacation Time

我已经为此进行了一段时间的尝试,并尝试了不同的样式...我需要开发一个跟踪电子表格(适用于50名员工),该电子表格将根据以下参数计算应计休假时间和所使用的休假时间:

*在公司工作不到三年但超过90天周年纪念日的员工(他们开始应聘时)(此事还有其他警告……应聘日是指该月之后的当月的第一个月) 90天)[我在excel工作表中算出了这90天的项目],它将在以下时间产生:-月底每月4小时,他们可以存储的最大上限为72小时(但如果他们使用休假时间并降至72小时以下,他们最多可以继续累积72小时...)

*在公司工作超过3年但不到6年的员工会保留之前的假期,并从这里开始累积:-月底每月6.8个小时,最高上限为122.4他们可以存储的小时数(但是如果他们使用休假时间并低于122.4小时,则可以继续累积最多122.4小时...)

*在公司工作了6年及以上的员工可以休假,并从这里开始累积:-月底每月10个小时,最多可以存储180个小时(但如果他们使用休假时间并低于180小时,则可以继续累积最多180小时。...)

是的,我需要能够扣除使用的休假时间。

是否有人对布局或可以使用这些功能的公式提出任何建议? 感谢您对我还能使用的其他任何建议或建议!

我已经创建了一张测试表,并根据这些条件在第一组中进行了累积,并从第二组规则开始(3年以上)。

但是,当我在第一个保单上最多累积72小时时,如果他们使用休假并再次落在72小时上限之内,它将不再正确累积。

我知道这是一项过于复杂的政策,但这是公司想要的,他们不会让步。...任何帮助或建议,我们都感激不尽。 我知道我的工作表不好。.但是我正在尝试选项。


以下是我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当月花费的天数
  • 月底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

为了不获取意大利面条式,我建议在VBA中创建一些用户定义的函数,例如

Function GetCap(EntryDate, ThisDate) As Single
Function GetMonthly(EntryDate, ThisDate) As Single

根据经验,在工作表中调试/维护2-3个嵌套的IfSelect Case比在92个字符长的公式中没有空格,没有注释等要容易得多。 如果业务逻辑发生变化,则只需要审查一个代码块-而不是在增长3x12个月x 50个用户的工作表中使用数十个/百个公式。

以上功能可能需要例如的帮助

Function EndOfMonth(MyDate) as Date
Function BeginOfNextMonth(MyDate) as Date

这样在工作表中

  • 手动输入一个月又一个月的小时数
  • 计算新缓冲区为= MIN([oldbuffer] - [Spent] + GetMonthly(...), GetCap(...))
  • 谨慎使用相对/绝对寻址,以使公式在列/行之间“可复制”,例如
    • 向下复制时, ThisDate上的行绝对是从标头获得的
    • 向右复制时,每个Emp的EntryDate上的列绝对值

当然,您可以直接在工作表的单元格中使用=GetCap(...)=GetMonthly(...)以显示中间结果并用于调试目的。

比较日期时要小心

温馨提示

  • 3年后并非总是365x3天后
  • 检查VBA DateSerial()函数在大于12的月份和小于0的月份中做什么
  • 下个月月底总是提前2个月减去1的前几天......甚至在闰年GGG二月

    如果您对这些功能感到困惑,请发表更多问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM