【问题标题】:How to dynamically calculate the overtime left and the overtime used without a circular reference in Excel?Excel中如何动态计算剩余的加班时间和使用的加班时间?
【发布时间】:2019-12-19 20:30:27
【问题描述】:

目标是在这个“两周工资”输入工作簿中修复我的逻辑中的循环引用。 当人们不在办公室并且无法访问系统时,这是一张临时表。 也就是说,该表仍应为他们提供准确的数据。

有 26 张表,其中包含员工完成的时间,例如,采用典型格式,每张 2 周(总共一年)。 剔除本次查询的所有格式和无用信息,它们看起来有点像这样(带有正确的日期):

    +-----------+----------+--------+----------+--------+-------+------+
    |   Date    | AM start | AM end | PM start | PM end | total | over |
    +-----------+----------+--------+----------+--------+-------+------+
    |   Monday  |   8:00   |  12:00 |   13:00  |  16:00 | 7:00  | 0:00 |
    +-----------+----------+--------+----------+--------+-------+------+
    |  Tuesday  |   8:00   |  12:00 |   13:00  |  15:00 | 6:00  | 0:00 |
    +-----------+----------+--------+----------+--------+-------+------+
    | Wednesday |   8:00   |  12:00 |   13:00  |  17:00 | 8:00  | 1:00 |
    +-----------+----------+--------+----------+--------+-------+------+
    |    ...    |   ....   |  ....  |   ....   |  ....  | ....  | .... |
    +-----------+----------+--------+----------+--------+-------+------+

然后在另一张纸上,需要计算支付金额(每 2 周最多 70 小时)、必须支付的加班费等。

          A          B           C            D                   E                F              G           
      +-------+------------+----------+---------------+-----------------------+-------+---------------------+
    1 | Pay # | Hours paid | Overtime | Used overtime |  Total hours worked   |       | Total overtime left |
      +-------+------------+----------+---------------+-----------------------+-------+---------------------+
    2 |   1   |    70:00   |   5:00   |      0:00     |         75:00         |       |         0:00        |
      +-------+------------+----------+---------------+-----------------------+-------+---------------------+
    3 |   2   |    70:00   |   0:00   |      5:00     |         65:00         |       |                     |
      +-------+------------+----------+---------------+-----------------------+-------+---------------------+
    4 |  ...  |     ...    |    ...   |      ....     |                       |       |                     |
      +-------+------------+----------+---------------+-----------------------+-------+---------------------+

在上表中,工资#2 获得了 70 小时的工资,但该人只工作了 65 小时,并使用了过去两周加班时间中的 5 小时。 A1:E4 连接在一起,G1:G2 本身是数据,与该表中的工资数字或其他数据无关(换句话说,只有一个单元格包含剩余的总加班时间,而 F 用于分隔两者表)。 G2 目前有 0:00,因为它本应用于完成第二次付款的 5:00

支付小时数单元格 (B) 包含以下公式:

=IF($E$2>=2.91666666666667,2.91666666666667,IF((2.91666666666667- $E$2)<=$G$2;2.91666666666667,$E$2+$D$2))
  • Step 1 [condition]:如果这两周的总工作时间大于等于70小时(这里使用2.91666666666667代替“70:00”进行比较);
    • 步骤 1.1 [true]:然后在单元格中输入“70:00”,因为每两周最多有 70 小时(这很好,因为我们有另一个单元格存储加班完成(在本例中) , C));
    • 步骤 1.2 [false->condition] :否则,该两周的总工作时间低于 70 小时,因此请检查 70 小时减去该两周的总工作时间是否低于总小时数剩余加班时间(用于查看本次是否有剩余加班时间可以使用,使工资最高可以达到70小时);
      • 步骤 1.2.1 [true]:如果是,请投入 70 小时,因为我们将使用剩余的部分加班费来完成这两周;
      • 步骤 1.2.2 [false] :否则,将这两周的总工作时间添加到该周使用的加班时间中(此单元格稍后用她的公式解释,此步骤适用于当有剩下的加班时间,但还不足以让它达到 70 小时,所以我们把它最终的时间量)。

这里重要的部分是要记住B 需要D,因此我解释了它的公式。

加班时间 (C) 和“总工作时间” (E) 单元格包含基本公式,它们要么给出超过 70 小时的时间量,要么给出总工作小时数;这里不用解释了,可以的。

Used overtime 单元格 (D) 是比较棘手的地方。为了解释它,我们需要知道G2 是怎么回事。

剩余的总加班时间单元格 (G2) 是加班时间的总和减去 D 中所有单元格的总和(已使用加班时间)。 其目的是获取剩余加班费的最新值。

返回加班时间。 您可能开始在这里看到循环引用; D 需要 G2 才能工作,G2D 中所有单元格的总和(在表格范围内,不是全部)。 该公式需要剩余加班时间的概念,因此它可以检查我们是否可以使用一些。 这是公式:

=IF($E$2>=2.91666666666667,"00:00",IF((2.91666666666667-$E$2)<=$G$2,(2.91666666666667-$E$2),IF(($G$2+$E$2)<=2.91666666666667,$G$2,"00:00")))
  • 第 1 步 [条件]:如果这两周的总工作时间大于或等于 70 小时;
  • 第 1.1 步 [true]:然后输入 0 小时,因为该工资已经达到最长 70 小时;
  • 步骤 1.2 [false->condition] :否则,这两周的总工作时间低于 70 小时,如果我们还有加班费可能会增加,因此请检查 70 小时是否减去这两周的总工作时间(我们可以从剩余的加班时间中增加的时间量)低于或等于剩余的加班费总额;
    • 第 1.2.1 步 [true]:然后将 70 小时减去那两周的总工作时间(我们将从剩余的加班时间中添加的时间增加到最多70 小时);
    • Step 1.2.2 [false->condition] : 否则,检查剩余加班时间加到两周工作总时数中是否小于或等于 70 小时(如果是,则这意味着我们可以在不超过 70 小时的情况下添加所有剩余的加班时间);
      • 步骤 1.2.2.1 [true]:如果是,则该值是剩余的总加班时间,因为它会使那两周的总工作时间仍然低于最大值,但要支付加班费待付;
      • 步骤 1.2.2.2 [false]:否则,将 0 小时,因为我们不会在此工资中添加加班,因为没有加班需要添加。

我如何既能得到准确的加班时间,又能在没有循环引用的情况下动态计算自己的加班时间?

【问题讨论】:

  • 上述星期三的上午和下午开始/结束时间与星期一相同,但时间总计为 8:00,Over=1:00。星期三的下午结束时间应该是 17:00 吗?
  • @PeterT 你是对的,写的时候打错了。我会将其编辑为正确的结束时间。谢谢。

标签: excel excel-formula logic circular-reference


【解决方案1】:

如果每一行都有一个在该支付期之后的总加班时间的最新值怎么办?

G2 的公式:=C2-D2

那么之后的每个G单元只需要加上上一个工资期的加班时间+加班时间-已用加班时间:

G3:=G2+C3-D3

它只是从那里继续。

【讨论】:

  • 我今天应该可以使用你的逻辑来尝试它,一旦我测试它是否适合我,我会尽快回复你。
  • 这个逻辑似乎有效。如果我最终需要机会,将会更新。感谢您的回答;将其标记为已接受的答案。
猜你喜欢
  • 2016-10-16
  • 2022-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
  • 1970-01-01
  • 2018-11-29
相关资源
最近更新 更多