Excel中如何在没有循环引用的情况下动态计算剩余加班时间和已使用加班时间?

How to dynamically calculate the overtime left and the overtime used without a circular reference in Excel?

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

有 26 个 sheet 包含员工完成的时间,例如,以典型的格式,每个 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 |
    +-----------+----------+--------+----------+--------+-------+------+
    |    ...    |   ....   |  ....  |   ....   |  ....  | ....  | .... |
    +-----------+----------+--------+----------+--------+-------+------+

然后在另一个 sheet 上,必须计算支付的金额(每 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 |  ...  |     ...    |    ...   |      ....     |                       |       |                     |
      +-------+------------+----------+---------------+-----------------------+-------+---------------------+

在上面的 table 中,工资 #2 得到了 70 小时的报酬,但是这个人只做了 65 小时,并且使用了过去两周加班的 5 小时。 A1:E4 连接在一起,G1:G2 本身就是数据,与工资号码或 sheet 中的其他数据无关(换句话说,只有一个单元格包含总加班时间left 和 F 用于分隔两个 tables)。 G2 目前有 0:00 因为 5:00 它本来可以用来完成第二次付款。

工时 单元格 (B) 包含此公式:

=IF($E>=2.91666666666667,2.91666666666667,IF((2.91666666666667- $E)<=$G;2.91666666666667,$E+$D))

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

Overtime (C) 和 "Total hours worked" (E) 单元格包含基本公式,可以给出超过 70 的时间小时或总工作小时数;不用在这里解释了,很管用

已用加班 单元格 (D) 变得棘手。为了解释它,我们需要知道 G2.

是怎么回事

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

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

=IF($E>=2.91666666666667,"00:00",IF((2.91666666666667-$E)<=$G,(2.91666666666667-$E),IF(($G+$E)<=2.91666666666667,$G,"00:00")))

我怎么能在没有循环引用的情况下同时拥有准确的剩余加班时间和使用的加班时间呢?

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

G2 的公式:=C2-D2

那么之后的每个G格只需要加上上一个支付周期剩余的加班费+加班费-已用加班费:

G3:=G2+C3-D3

从那里开始。