Google 工作表公式,用于计算具有不同 start/end 日期、重叠和间隔的任务的实际总持续时间
Google Sheets Formula to calculate actual total duration of tasks with different start/end dates, overlaps, and gaps
我知道如何使用自定义 function/script 来做到这一点,但我想知道是否可以使用内置公式来完成。
我有一个包含开始日期和结束日期的任务列表。我想计算在所有任务上花费的实际工作日数 (NETWORKDAYS
)。
- 任务天数可能会重叠,所以我不能只计算每个任务花费的天数
- 任务之间可能会有间隔,所以我不能只找出第一个开始和最后一个结束之间的区别。
例如,让我们使用这些:
| Task Name | Start Date | End Date | NETWORKDAYS |
|:---------:|------------|------------|:-----------:|
| A | 2019-09-02 | 2019-09-04 | 3 |
| B | 2019-09-03 | 2019-09-09 | 5 |
| C | 2019-09-12 | 2019-09-13 | 2 |
| D | 2019-09-16 | 2019-09-17 | 2 |
| E | 2019-09-19 | 2019-09-23 | 3 |
这是视觉上的:
现在:
- 如果你总计
NETWORKDAYS
你会得到 15
- 如果你在 2019-09-02 和 2019-09-23 之间计算
NETWORKDAYS
,你会得到 16
但实际时长是13:
- A和B有点重叠
- B和C之间有差距
- D和E有差距
如果我要编写一个自定义函数,我基本上会获取所有日期,对它们进行排序,找到重叠的部分并删除它们,并考虑差距。
但我想知道是否有一种方法可以使用内置公式计算实际持续时间?
当然可以,为什么不呢:
=ARRAYFORMULA(COUNTA(IFERROR(QUERY(UNIQUE(TRANSPOSE(SPLIT(CONCATENATE("×"&
SPLIT(REPT(INDIRECT("B1:B"&COUNTA(B1:B))&"×",
NETWORKDAYS(INDIRECT("B1:B"&COUNTA(B1:B)), INDIRECT("C1:C"&COUNTA(B1:B)))), "×")+
TRANSPOSE(ROW(INDIRECT("A1:A"&MAX(NETWORKDAYS(B1:B, C1:C))))-1)), "×"))),
"where Col1>4000", 0))))
我知道如何使用自定义 function/script 来做到这一点,但我想知道是否可以使用内置公式来完成。
我有一个包含开始日期和结束日期的任务列表。我想计算在所有任务上花费的实际工作日数 (NETWORKDAYS
)。
- 任务天数可能会重叠,所以我不能只计算每个任务花费的天数
- 任务之间可能会有间隔,所以我不能只找出第一个开始和最后一个结束之间的区别。
例如,让我们使用这些:
| Task Name | Start Date | End Date | NETWORKDAYS |
|:---------:|------------|------------|:-----------:|
| A | 2019-09-02 | 2019-09-04 | 3 |
| B | 2019-09-03 | 2019-09-09 | 5 |
| C | 2019-09-12 | 2019-09-13 | 2 |
| D | 2019-09-16 | 2019-09-17 | 2 |
| E | 2019-09-19 | 2019-09-23 | 3 |
这是视觉上的:
现在:
- 如果你总计
NETWORKDAYS
你会得到 15 - 如果你在 2019-09-02 和 2019-09-23 之间计算
NETWORKDAYS
,你会得到 16
但实际时长是13:
- A和B有点重叠
- B和C之间有差距
- D和E有差距
如果我要编写一个自定义函数,我基本上会获取所有日期,对它们进行排序,找到重叠的部分并删除它们,并考虑差距。
但我想知道是否有一种方法可以使用内置公式计算实际持续时间?
当然可以,为什么不呢:
=ARRAYFORMULA(COUNTA(IFERROR(QUERY(UNIQUE(TRANSPOSE(SPLIT(CONCATENATE("×"&
SPLIT(REPT(INDIRECT("B1:B"&COUNTA(B1:B))&"×",
NETWORKDAYS(INDIRECT("B1:B"&COUNTA(B1:B)), INDIRECT("C1:C"&COUNTA(B1:B)))), "×")+
TRANSPOSE(ROW(INDIRECT("A1:A"&MAX(NETWORKDAYS(B1:B, C1:C))))-1)), "×"))),
"where Col1>4000", 0))))