Excel工作日功能,查找星期几

时间:2018-07-08 18:14:22

标签: excel weekday

我有一个带有一些日期的表,要查找星期一,星期二和星期四,我使用此代码

=HVIS.FEJL(SAMMENLIGN(DATO(ÅR(Året!$B$2);1;-2)-UGEDAG(DATO(ÅR(Året!$B$2);1;3))+AG5*7;Året!$B$6:$B$40;0);"")

它将找到星期一,并且工作正常-当我查看星期二和星期四时,我将“ UGEDAG”中的第一个数字更改为..; 1;到星期四为0或星期二为-2,我正在逐步尝试一些数字,最后得到这些数字,有人可以告诉我原因: 1 =星期一(我想我知道为什么),但是-2 =星期二,0 =星期四

有人可以向我解释为什么使用这些数字吗? Hvis.Fejl是If.Error,Sammenlign是Match,Ugedag是Weekday,År是Year。

enter image description here

2 个答案:

答案 0 :(得分:0)

我认为原始公式中发生的事情是这样的:

  1. 无论B2中是什么日期,我们都会采用之前的12/29
  2. 然后,我们将使用此信息来确定上一个星期一

WEEKDAY函数为星期几提供从星期日开始的数字。本质上,这可以认为是星期六之后的天数。因此,从周六减去此偏移量将始终使我们回到一周的第一个周六。

此公式:WEEKDAY(DATE(YEAR(Sheet1!$ B $ 2),1,3))或更准确地说,您的UGEDAG(DATO(ÅR(Året!$ B $ 2); 1; 3))询问1月3日是星期几,在该工作表的B2单元格中为一年,然后用于确定上一年29日之前的星期一。换句话说,它正在询问与第三天的星期六的偏移量,并使用此起点来确定较早的星期一。要将其用于星期二或星期四,更有意义的是更改日期(即3)而不是月份(即1)。要获得星期一,请使用3。要获得星期二,您将使用2(从星期一开始向前一天,您要减去一天)。由于星期几是Mod 7,要获得星期四,您将再返回两天并使用0(或者更可能是7,因为任何月份的第0天似乎并不总是合乎逻辑)。

您看到的是,如果按照您所描述的改变月份,则它的工作原理类似,特别是因为您将月份限制为上一年的12月(第0个月),本年的1月(第1个月)和上一年的10月(月-2)。原因是这些月份的每月的第三天与我的一周中的几天相关,因此您永远不会跨过并非总是具有相同天数的2月。

换句话说,我使用3的偏移量来计算星期一,使用2的偏移量来获取星期二,使用7(或0)来获取星期四。这些将为任何一年的1月3日,1月2日和1月7日的周六提供抵消。

您巧合地使用的数字是相同的偏移量(因为它们从未跨过2月)。换句话说,您的1月3日与我的1月3日在一周的同一天。同样,我的1月2日与您的10月3日位于同一天,而我的1月7日将始终与您的12月3日位于一周的同一天。

我希望这可以帮助您确定要理解的内容。

以下是我在上面键入的内容可能使用的公式:

星期一:

=HVIS.FEJL(SAMMENLIGN(DATO(ÅR(Året!$B$2);1;-2)-UGEDAG(DATO(ÅR(Året!$B$2);1;3))+AG5*7;Året!$B$6:$B$40;0);"")

星期二:

=HVIS.FEJL(SAMMENLIGN(DATO(ÅR(Året!$B$2);1;-2)-UGEDAG(DATO(ÅR(Året!$B$2);1;2))+AG5*7;Året!$B$6:$B$40;0);"")

星期四:

=HVIS.FEJL(SAMMENLIGN(DATO(ÅR(Året!$B$2);1;-2)-UGEDAG(DATO(ÅR(Året!$B$2);1;7))+AG5*7;Året!$B$6:$B$40;0);"")

我希望这能远程响应您的要求。

答案 1 :(得分:0)

我很感谢其他细节,但我可能永远不会完全理解工作表在做什么。我认为发生的事情是,由于2017年12月29日是星期五,因此您进行的计算选择的时间是12/22(星期五)至12/28(星期四)。换句话说,公式DATO(ÅR(Året!$ B $ 2); 1; -2)会人为地使星期五成为一周的第一天。如果在2017年是这样的日子,我们将看到这个问题从星期四开始(星期日到星期三在一个星期内,而星期四到星期六在另一个星期内)。这可能是由于如何定义WEEKNUM(UGE.NR)所致,因为有一个参数可以告诉它使用星期几,但是我怀疑问题出在去年的12月29日。我认为您想在年末的一周中的某一天定居,然后从那里进行计算。

在不了解更多信息的情况下,我认为我们应该更改此计算方式:

=HVIS.FEJL(SAMMENLIGN(DATO(ÅR(Året!$B$2);1;-2)-UGEDAG(DATO(ÅR(Året!$B$2);1;3))+AG5*7;Året!$B$6:$B$40;0);"")

我认为它没有满足您的需求。我认为星期一会得到相同的结果:

=HVIS.FEJL(SAMMENLIGN(HELTAL(DATO(ÅR(Året!$B$2);1;-2)/7)*7+2+AG5*7;Året!$B$6:$B$40;0);"")

其中HELTAL(DATO(ÅR(Året!$ B $ 2); 1; -2)/ 7)* 7为您提供上一年的最后一个完整周的星期六(我认为HELTAL是INT),我们加上2到星期一。这似乎更直接一些,因为将“ +2”更改为“ +3”会给您星期二:

=HVIS.FEJL(SAMMENLIGN(HELTAL(DATO(ÅR(Året!$B$2);1;-2)/7)*7+3+AG5*7;Året!$B$6:$B$40;0);"")

将其更改为“ +5”会给您星期四

=HVIS.FEJL(SAMMENLIGN(HELTAL(DATO(ÅR(Året!$B$2);1;-2)/7)*7+5+AG5*7;Året!$B$6:$B$40;0);"")

由于我们从星期日开始,所以我认为您不会使用星期五(+6)或星期六(+7)的现有公式看到您遇到的问题。

您可能需要稍微调整一下公式,但是我认为这会使您更接近所需的内容。