gpt4 book ai didi

vba - 需要 Excel 表来计算复杂的假期累积和假期时间的使用

转载 作者:行者123 更新时间:2023-12-04 21:05:54 26 4
gpt4 key购买 nike

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

*在公司工作不到 3 年但超过 90 天周年纪念日(他们开始累积)的员工(对此还有一个警告……累积日是当月的第一天90 天)[我在我的 Excel 表上计算出这个 90 天的项目]它将累积在:
- 每月 4 小时,在月底,他们可以存储的 MAX 上限为 72 小时(但如果他们使用休假时间并低于 72 小时,他们可以继续累积最多 72 小时。 .)

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

*在公司工作 6 年及以上的员工可以结转之前的假期,并从这里开始累积:
- 每月 10 小时,在月底,他们可以存储的 MAX 上限为 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栏条目日期
  • C 列当月花费的天数
  • D 列在月末限制了累积缓冲区
  • 每月重复 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 嵌套 If的或 Select Case 's 在 VBA 中比 92 个字符长的公式没有空格,没有注释等在工作表中。如果业务逻辑发生变化,则需要审查一个代码块 - 而不是一张已增长 3x12 个月 x 50 个用户的表格中的数十/数百个公式。
    上述功能可能需要例如帮助。
    Function EndOfMonth(MyDate) as Date
    Function BeginOfNextMonth(MyDate) as Date
    这样你就可以在工作表中
  • 手动输入每月花费的小时数
  • 将新缓冲区计算为 = MIN([oldbuffer] - [Spent] + GetMonthly(...), GetCap(...))
  • 小心使用相对/绝对寻址,使公式跨列/行“可复制”,例如

  • ThisDate 上的绝对行向下复制时从标题中获取


  • EntryDate 上的绝对列向右复制时的每个 Emp


  • 您当然可以使用 =GetCap(...)=GetMonthly(...)直接在工作表的单元格中显示中间结果并用于调试目的。
    比较日期时要小心
    温馨提示 :
  • 3 年后并不总是 365x3 天后
  • 检查 VBA DateSerial() 函数对月 > 12 和月 < 0 的作用
  • 下个月的月底总是提前 2 个月的第一天 - 1 ... 即使在闰年的 2 月 ggg
    如果您遇到这些功能,请发布更多问题。
  • 关于vba - 需要 Excel 表来计算复杂的假期累积和假期时间的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19263992/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com