VB或宏从Excel中的持续时间计算中排除时间段

时间:2013-06-25 03:26:18

标签: excel datetime excel-vba time ticket-system vba

我有一张Excel表,其中包含数千张事故单。每张门票通常会持续几个小时或几天,我通常会通过从截止日期和时间中减去开放日期和时间来计算总持续时间。

但是我想考虑一下,不计算非办公时间(夜间),周末和假期。

因此,我创建了两个额外的参考表,其中一个包含非工作时间(例如每天早上7点至早上7点,周六和周日全天,以及公众假期列表)。

现在我需要找到某种VB宏,它会自动计算每张票的“实际持续时间”,通过从该总票数中删除该列表下的任何时间。

我浏览了这个网站和其他论坛,但是我找不到我要找的东西。如果有人能帮助我实现这一目标,我将非常感激。

致以最诚挚的问候,

亚历

1 个答案:

答案 0 :(得分:0)

您可以使用NETWORKDAYS功能计算间隔中的工作天数。实际上你似乎已经完美地设置了它:它需要开始日期,结束日期和指向一系列假期的指针。默认情况下,它计算非周末的所有天数。

为了计算日内时间,你需要一些额外的魔力。假设门票仅在商务时间打开和关闭,它将如下所示:

first_day_hrs := dayend - ticketstart
last_day_hrs := ticketend - daystart
inbeetween_hrs := (NETWORKDAYS(ticketstart, ticketend, rng_holidays) - 2) * (dayend - daystart)

total_hrs := first_day_hrs + inbetween_hrs + last_day_hrs

当然,名称实际上应该指的是Excel单元格。我建议使用列表和/或名称。