【发布时间】:2021-06-09 10:30:11
【问题描述】:
我遇到了一个两难境地,我以为我可以轻松克服,但最终得到了不同的结果。
所以我一直在使用以下公式:
=(NETWORKDAYS(H6,N6)-1)*($F$2-$E$2)+IF(NETWORKDAYS(N6,N6),MEDIAN(MOD(N6,1),$F$2,$E$2),$F$2)-MEDIAN(NETWORKDAYS(H6,H6)*MOD(H6,1),$F$2,$E$2)
这个公式非常有效,因为我已将其修改为使用 NETWORKDAYS.INTL,因为所有工作日都是工作日,但工作时间是上午 8:00 到晚上 11:00。
我修改后的代码是:
=(NETWORKDAYS.INTL([@[DC_CREATION_DATE]],[@[ACTUAL_END_DATE]],"0000000")-1)*(upper-lower)
+IF(NETWORKDAYS.INTL([@[ACTUAL_END_DATE]],[@[ACTUAL_END_DATE]],"0000000"),MEDIAN(MOD([@[ACTUAL_END_DATE]],1),upper,lower),upper)
-MEDIAN(NETWORKDAYS.INTL([@[DC_CREATION_DATE]],[@[DC_CREATION_DATE]],"0000000")*MOD([@[DC_CREATION_DATE]],1),upper,lower)
地点:
- DC_CREATION_DATE = 开始日期
- ACTUAL_END_DATE = 结束日期
- upper = 包含结束时间的命名范围,即晚上 11:00
- lower = 包含开始时间的命名范围,即上午 8:00
现在的问题是,对于特定的月份,一天的工作时间变成了轮班:
- 开始时间 1 = 上午 11:00
- 结束时间 1 = 下午 5:00
- 开始时间 2 = 晚上 9:00
- 结束时间 2 = 凌晨 2:00
上述时间以外的时间均为非工作时间。我们收到的 TT 可以在工作时间之外,但我只会计算工作时间内的持续时间。
我尝试做的是在同一日期范围内使用相同的公式两次(第一次,上限变为下午 5:00,下限变为上午 11:00,结果存储在单元格中,第二次,上限变成 2:00 AM 和更低变成 9:00 PM 并且结果存储在不同的单元格中),然后将两个结果添加到单独的单元格中以获得工作时间范围之间的总体工作时间。
唉,我认为这很简单,但我看到的是不同的结果,这两个公式在运行时。 因为如果时间超出了工作范围,即使是开始和结束,它也应该返回 0。(我相信我可以通过使用 IF 来克服这个问题)
######## 是显示负值的字段。由于我将所有单元格格式化为 [h]:mm
谁能在这方面帮助我?
【问题讨论】:
-
你确定你没有得到##########,因为你是根据时间而不是日期/时间格式计算上下限(这会给出负数我希望 ######### 在 excel(!) 中出现负持续时间?即第二班的上午 2 点上下班,晚上 9 点下班,所以如果你只精炼时间格式,那么你需要有某种 if(date_end > date_start, 2nd_working_hrs = time_end + 1 - time_start, time_end-time_start ) (交换结束,根据需要从上、下分别开始 - 但你明白我的要点,对吗?看看这个解决方案。这是相似的(并支持我的!:) Lol
-
...(续):stackoverflow.com/questions/67351953/… PS:如果这行得通,我有机会提出赏金 - 这是我发现/悲伤地看着这个 Q 的唯一原因 :( :)跨度>
标签: excel excel-formula calculation