【问题标题】:Excel Weekday function, finding day in weekExcel Weekday 函数,查找星期几
【发布时间】:2018-12-16 12:06:25
【问题描述】:

我有一张包含一些日期的表格,要查找星期一、星期二和星期四,我使用此代码

=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。

【问题讨论】:

  • 到目前为止,我发现您正在尝试使用以下方法确定上一年的最后一个星期一:=DATO(ÅR(Året!$B$2);1;-2)-UGEDAG (DATO(ÅR(Året!$B$2);1;3)) 我不知道 AG5 是什么,但如果它是一个整数,添加到上面仍然会导致星期一。因此,我认为您在问为什么需要将第二部分中的值调整为星期四的 0 和星期二的 -2。我希望我能理解。
  • 您理解正确,AG5 是周数整数。是的,我要的是关于 1、0 和 -2 的部分。

标签: excel weekday


【解决方案1】:

我很欣赏额外的细节,但我可能永远不会完全理解工作表的作用。我认为正在发生的事情是,由于 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) 的现有公式所遇到的问题。

你可能需要稍微调整一下公式,但我认为这会让你更接近你的需要。

【讨论】:

  • 好的,+1 是星期日
【解决方案2】:

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

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

WEEKDAY 函数为一周中的每一天提供一个从星期日开始的数字。本质上,这可以被认为是星期六之后的天数。所以从always中减去这个从星期六的偏移量总是会让我们回到一周的第一个星期六。

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

您所看到的是,如果您按照您的描述改变月份,它的工作方式类似,特别是因为您将其限制为上一年的 12 月(第 0 个月)、当年的 1 月(第 1 个月),以及上一年的 10 月(月 -2)。原因是这些月的第 3 天与我一周中的天数的关联方式相同,并且您永远不会跨过并非总是具有相同天数的二月。

换句话说,我使用偏移量 3 来计算我的星期一,我使用偏移量 2 来计算我的星期二,我使用 7(或 0)来计算我的星期四。这些将给出任何给定年份的 1 月 3 日、1 月 2 日和 1 月 7 日星期六的偏移量。

您巧合使用的数字是相同的偏移量(因为它们从未跨越二月)。换句话说,您的 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,但是如果我在星期五使用 6,在星期六使用 5,那么对于第 35 周(31/08/2018 和 01/09/2018)中的日期,它会给出单元格第 36 周是颜色而不是 35,为什么?
  • 我怀疑公式的第一部分有问题,但我很难过。我无法确定您为什么将其与上一年的 12 月 29 日联系起来(并从那里进行调整)。我怀疑这个日期适用于前一年,并且每年应该基于前一年最后一周的特定日期。公式的其余部分(即周一/周四/周二的部分)也需要更改以适用于上一年最后一周的特定日期。
  • 我也无法理解查找中的星期结构以及颜色是如何确定的,所以如果您将这些信息添加到原始帖子中,有人可以提出更好的方法来实现您的目标努力完成。
  • 嗨 FocusWiz 我添加了一张显示 AG5 周数的图片,其他周是 AH5 = AG5+1 等等。
  • 不是 100% 确定我理解这个问题,但请参阅我的下一个答案,因为在这里输入太多了。感谢您提供更多信息。我现在了解到您正在使用 Excel WEEKNUM 公式并试图使其与您正在计算的值一起使用。
【解决方案3】:

我必须承认,您对问题的任何描述都没有得到很好的定义。我从这里的所有讨论中收集到的是你想在 12 月 29 日之前找出“星期一”吗?是吗 ?如果这是绊脚石,那么这是一个巧妙的解决方案(假设 C3 的日期为 29/Dec):

=WORKDAY.INTL(C3,-1,"0111111")

将为您提供 12 月 29 日之前的日期,即星期一... 要在 12 月 29 日之前获得星期二,请使用这个 -

=WORKDAY.INTL(C3,-1,"1011111")

请参阅公式的“周末”部分,我们说这一天(我们想要的任何一天)是 FALSE(不是周末)其余都是周末(TRUE (1))...

希望您能够从这里构建您的其余公式....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-23
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 2021-11-19
    • 2014-07-19
    相关资源
    最近更新 更多