使用动态单一公式计算日期

时间:2016-05-09 16:22:02

标签: excel-formula

这是earlier question的后续行动。

@ForwardED我试图将您原来的单个静态公式转换为单个动态公式。

不幸的是,我的雇主的过滤器会让某些东西超链接,但不允许我从同一网站下载或查看。我也试图想出一个浮动日期的公式。

1 个答案:

答案 0 :(得分:1)

以下是我在原始问题上提供的扩展说明的副本。我不确定你是否错过了。它处理的假期有一个像圣诞节,每年12月25日的设定日期。但是,如果它在星期六下降,则工作时间是星期五,如果是星期日,那么休息日是星期一。

处理周六或周日的假期

我们需要再次参考电子表格中的一些单元格,以便我再次使用Q10作为示例,我们将假设日期为2014/10/24。

=IF(WEEKDAY(DATE(YEAR(Q10),12,25))=7,DATE(YEAR(Q10),12,24),IF(WEEKDAY(DATE(YEAR(Q10),12,25))=1,DATE(YEAR(Q10),12,26),DATE(YEAR(Q10),12,25)))

公式首先检查工作日是星期六。我们使用将返回星期几的函数来执行此操作。请参阅原始问题中的步骤2)。这部分来自上面的等式:

WEEKDAY(DATE(YEAR(Q10),12,25))

在这种情况下,它将返回与日期函数产生的星期几相对应的单个整数1到7。如果它是1我们知道它的星期日,如果它的7我们知道星期六。所以周六的支票是:

WEEKDAY(DATE(YEAR(Q10),12,25))=7

如果WEEKDAY()= 7为真,那么我们提供前一天的日期,实际上只是从我们看到的日期减去1。我们使用公式的这一部分来计算:

DATE(YEAR(Q10),12,24)

注意我如何将当天从25改为24.另一种方法是回收我们的日期,让计算机使用以下公式再做一次计算:

DATE(YEAR(Q10),12,25)-1
or
DATE(YEAR(Q10),12,25-1)

这一切都位于if语句的TRUE部分。因此,如果日期不在星期六,那么我们将在IF声明的FLASE部分结束。在这里,我们用第二个IF检查星期日的日期。我们使用与周六检查相同的理论和流程。

IF(WEEKDAY(DATE(YEAR(Q10),12,25))=1,DATE(YEAR(Q10),12,26),DATE(YEAR(Q10),12,25))

在IF语句中放置IF语句通常称为“嵌套”。整个IF语句发生在前一个IF的FALSE部分,检查它是否是星期六。这次我们检查了星期天:

WEEKDAY(DATE(YEAR(Q10),12,25))=1

如果这是真的,那么我们需要将日期增加1天,而不是像星期六那样减少日期:

DATE(YEAR(Q10),12,26)
or
DATE(YEAR(Q10),12,25)+1
or
DATE(YEAR(Q10),12,25+1)

这是周日检查的真实部分。从逻辑上讲,获取此嵌套IF语句的FALSE部分的唯一方法是使星期六检查失败,然后不通过星期日检查。这意味着你不需要经历并检查WEEKDAY是否为2,3,4,5或6!它是通过消除星期日和星期六(1和7)的过程之一。如果日期是星期一到星期五,我们不需要更改日期,可以保持原样:

DATE(YEAR(Q10),12,25)

我意识到我没有解释日期功能是如何工作的,尽管我认为我曾尝试过以前的一个问题......无论如何! DATE(arg1,arg2,arg3)需要三个不同的参数作为整数或其他返回整数的函数。

  • arg1是年份所以2014年,1995年,1965年都是可接受的整数。我们也可以使用YEAR(Q10),其中单元格Q10保持2014/10/24的日期。在这种情况下,YEAR(Q10)将返回2014年。

  • arg2是月份,需要是1到12范围内的整数。再次,你总是可以使用一个返回该范围内整数的公式,例如我们之前的MONTH(Q10) Q10的值将返回10.

  • arg3是天,与上面类似,它需要是一个整数。像DAY(Q10)这样的公式将返回值24。

这意味着如果我们知道假日的哪一天,我们可以通过提供一个月份和日期强制它来约会,并让年份由提供您感兴趣的年份的公式决定。所以如果你查看最后一个公式,你可以看到我们将月份固定为12,将那一天固定为25年。这一年将从Q10单元格中提供的日期确定。