计算特定年份在一定范围内的天数

1 worksheet-function microsoft-excel microsoft-excel-2016

样本数据:

样本数据

您好,我正在努力寻找正确的 Excel 公式来返回日期范围内特定年份的天数。2010 年曾有过类似的帖子,但对我来说没有用。

fix*_*234 5

我看到一个不需要 VBA 的简单解决方案(对于简单解决方案来说这是一个很长的答案,因为它包含一些变体来涵盖问题中不明确的几个问题)。

在此输入图像描述

请注意,此答案包含针对不同用例的多个版本的公式。图像中显示的公式只是一个,反映“持续时间”而不是天数,如问题示例所示。

“天数”定义

有几种方法可以解释这一点。如果某件事从今天中间开始并在明天中间结束,您可能会认为这是一天的持续时间。如果您对事件发生的日历天数感兴趣,您会考虑那两天。我将展示这两种情况,您可以应用与您相关的一种情况。

开始和结束只是日期与日期/时间

如果范围“开始”和“结束”只是日期,则该范围将以全天为单位存储,因此您可以使用简单的算术来计算持续时间。如果它们实际上存储为日期/时间并且您只是显示日期部分,则隐藏的时间信息可能会导致意外的舍入错误。我将展示这两种情况的解决方案。

解决方案:基于持续时间

因此,任务是确定该范围的任何部分是否属于给定年份,然后计算属于该部分的持续时间。此公式使用年份列标题,因此它需要在最后完成日期之后一年的列。

如果范围“开始”和“结束”只是日期并且目标是“持续时间”,则 D2 中的公式(拖动以填充矩阵):

=IF(OR($A2>=E$1,$B2<D$1),0,MIN($B2,E$1)-MAX($A2,D$1))
Run Code Online (Sandbox Code Playgroud)

如果范围“开始”和“结束”包含日期/时间信息并且目标是“持续时间”,则 D2 中的公式:

=IF(OR($A2>=E$1,$B2<D$1),0,DATEDIF(MAX($A2,D$1),MIN($B2,E$1),"D"))
Run Code Online (Sandbox Code Playgroud)

内置的 DATEDIF 函数为您提供日期之间的差异(忽略时间信息),并且您可以指定显示的单位。

解释

在这两个公式中,IF 测试检查开始日期是否在本年度结束之后或结束日期是否在本年度之前。如果是这样,则填充零。

否则,它会计算日期差。它使用较晚的年份开始(上一年范围的延续)或范围开始(一年中的某个时间开始),以及范围结束(一年中结束)或范围开始的较早者。明年(范围持续到明年)。

解决方案:按天数计算

如果您的目标是将范围内的每一天算作一整天,我们需要在该范围的去年条目中添加一天。一种简单的方法是使用布尔值 (true=1, false=0) 来测试 Finish 年份是否等于“当前”年份:(YEAR($B2)=YEAR(D$1)),可以将其添加到上述任一公式中。以第一个公式为例:

=IF(OR($A2>=E$1,$B2<D$1),0,MIN($B2,E$1)-MAX($A2,D$1)+(YEAR($B2)=YEAR(D$1)))
Run Code Online (Sandbox Code Playgroud)