Excel Weekday 函数,查找星期几
Excel Weekday function, finding day in week
我有一个 sheet 和一些日期,要查找星期一、星期二和星期四,我使用此代码
=HVIS.FEJL(SAMMENLIGN(DATO(ÅR(Året!$B);1;-2)-UGEDAG(DATO(ÅR(Året!$B);1;3))+AG5*7;Året!$B:$B;0);"")
它会找到星期一,并且工作正常 - 当我查看星期二和星期四时,我更改了 "UGEDAG"..;1 中的第一个数字;星期四为 0 或星期二为 -2,我正在逐步尝试一些数字,最后得到这些数字,有人能告诉我原因吗:
1 = 星期一(我想我知道为什么)但是,-2 = 星期二和 0 = 星期四
有人可以向我解释为什么会有这些数字吗?
Hvis.Fejl 是 If.Error,Sammenlign 是火柴,Ugedag 是工作日,År 是年。
我认为原始公式中发生的事情是这样的:
- 无论 B2 中的日期是什么,我们都采用之前的 12/29
- 然后,我们将使用此信息来确定前一个星期一
WEEKDAY 函数为一周中的每一天提供一个从星期日开始的数字。从本质上讲,这可以被认为是星期六之后的天数。因此,从 always 中减去星期六的偏移量将始终使我们回到一周的第一个星期六。
此公式:WEEKDAY(DATE(YEAR(Sheet1!$B$2),1,3)) 或更准确地说,您的 UGEDAG(DATO(ÅR(Året!$B$2);1;3)),在 sheet 的单元格 B2 中询问 1 月 3 日是一年中的哪一天,然后它被用来确定前一年 29 日之前的星期一。换句话说,它询问一年中第 3 天距星期六的偏移量,并使用此起点来确定较早的星期一。要在星期二或星期四使用它,可能更有意义的是改变日期(即 3)而不是月份(即 1)。要获得星期一,请使用 3。要获得星期二,您将使用 2(从星期一向前一天,您将减去一天)。由于一周中的第几天是 Mod 7,要获得星期四,您将再返回两天并使用 0(或者更可能是 7,因为任何一个月的第 0 天似乎并不总是合乎逻辑)。
你看到的是,如果你按照你描述的那样改变月份,它的工作原理是相似的,特别是因为你将它限制在前一年的 12 月(第 0 个月)和当年的 1 月(第 1 个月) , 和上一年的十月 (-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);1;-2)-UGEDAG(DATO(ÅR(Året!$B);1;3))+AG5*7;Året!$B:$B;0);"")
星期二:
=HVIS.FEJL(SAMMENLIGN(DATO(ÅR(Året!$B);1;-2)-UGEDAG(DATO(ÅR(Året!$B);1;2))+AG5*7;Året!$B:$B;0);"")
星期四:
=HVIS.FEJL(SAMMENLIGN(DATO(ÅR(Året!$B);1;-2)-UGEDAG(DATO(ÅR(Året!$B);1;7))+AG5*7;Året!$B:$B;0);"")
我希望这可以远程响应您的问题。
我很欣赏额外的细节,但我可能永远无法完全理解 sheet 在做什么。我认为正在发生的事情是,由于 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);1;-2)-UGEDAG(DATO(ÅR(Året!$B);1;3))+AG5*7;Året!$B:$B;0);"")
我认为它没有满足您的需求。我认为这将在星期一给出相同的结果:
=HVIS.FEJL(SAMMENLIGN(HELTAL(DATO(ÅR(Året!$B);1;-2)/7)*7+2+AG5*7;Året!$B:$B;0);"")
其中 HELTAL(DATO(ÅR(Året!$B$2);1;-2)/7)*7 给出前一年最后一个完整周的星期六(我认为 HELTAL 是 INT)和我们加 2 到星期一。这似乎更容易理解,因为将“+2”更改为“+3”会给你星期二:
=HVIS.FEJL(SAMMENLIGN(HELTAL(DATO(ÅR(Året!$B);1;-2)/7)*7+3+AG5*7;Året!$B:$B;0);"")
将其更改为“+5”会给你星期四
=HVIS.FEJL(SAMMENLIGN(HELTAL(DATO(ÅR(Året!$B);1;-2)/7)*7+5+AG5*7;Året!$B:$B;0);"")
由于我们是从周日开始的,我认为您不会看到使用周五 (+6) 或周六 (+7) 的现有公式所遇到的问题。
您可能需要稍微调整一下公式,但我认为这会让您更接近您的需要。
我必须承认,无论您对问题的描述如何,都没有明确定义。我从这里的所有讨论中收集到的是你想在 12 月 29 日之前弄清楚 'Monday'?是吗 ?如果这是绊脚石,那么这是一个巧妙的解决方案(假设 C3 的日期是 29/Dec):
=WORKDAY.INTL(C3,-1,"0111111")
将为您提供 12 月 29 日之前的日期,即星期一...
要在 12 月 29 日之前获得星期二,请使用此 -
=WORKDAY.INTL(C3,-1,"1011111")
请参阅公式的 'weekend' 部分,我们说这一天(我们想要的任何一天)是 FALSE(不是周末)其余都是周末(TRUE (1))...
希望您能够从这里构建剩余的公式....
我有一个 sheet 和一些日期,要查找星期一、星期二和星期四,我使用此代码
=HVIS.FEJL(SAMMENLIGN(DATO(ÅR(Året!$B);1;-2)-UGEDAG(DATO(ÅR(Året!$B);1;3))+AG5*7;Året!$B:$B;0);"")
它会找到星期一,并且工作正常 - 当我查看星期二和星期四时,我更改了 "UGEDAG"..;1 中的第一个数字;星期四为 0 或星期二为 -2,我正在逐步尝试一些数字,最后得到这些数字,有人能告诉我原因吗: 1 = 星期一(我想我知道为什么)但是,-2 = 星期二和 0 = 星期四
有人可以向我解释为什么会有这些数字吗? Hvis.Fejl 是 If.Error,Sammenlign 是火柴,Ugedag 是工作日,År 是年。
我认为原始公式中发生的事情是这样的:
- 无论 B2 中的日期是什么,我们都采用之前的 12/29
- 然后,我们将使用此信息来确定前一个星期一
WEEKDAY 函数为一周中的每一天提供一个从星期日开始的数字。从本质上讲,这可以被认为是星期六之后的天数。因此,从 always 中减去星期六的偏移量将始终使我们回到一周的第一个星期六。
此公式:WEEKDAY(DATE(YEAR(Sheet1!$B$2),1,3)) 或更准确地说,您的 UGEDAG(DATO(ÅR(Året!$B$2);1;3)),在 sheet 的单元格 B2 中询问 1 月 3 日是一年中的哪一天,然后它被用来确定前一年 29 日之前的星期一。换句话说,它询问一年中第 3 天距星期六的偏移量,并使用此起点来确定较早的星期一。要在星期二或星期四使用它,可能更有意义的是改变日期(即 3)而不是月份(即 1)。要获得星期一,请使用 3。要获得星期二,您将使用 2(从星期一向前一天,您将减去一天)。由于一周中的第几天是 Mod 7,要获得星期四,您将再返回两天并使用 0(或者更可能是 7,因为任何一个月的第 0 天似乎并不总是合乎逻辑)。
你看到的是,如果你按照你描述的那样改变月份,它的工作原理是相似的,特别是因为你将它限制在前一年的 12 月(第 0 个月)和当年的 1 月(第 1 个月) , 和上一年的十月 (-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);1;-2)-UGEDAG(DATO(ÅR(Året!$B);1;3))+AG5*7;Året!$B:$B;0);"")
星期二:
=HVIS.FEJL(SAMMENLIGN(DATO(ÅR(Året!$B);1;-2)-UGEDAG(DATO(ÅR(Året!$B);1;2))+AG5*7;Året!$B:$B;0);"")
星期四:
=HVIS.FEJL(SAMMENLIGN(DATO(ÅR(Året!$B);1;-2)-UGEDAG(DATO(ÅR(Året!$B);1;7))+AG5*7;Året!$B:$B;0);"")
我希望这可以远程响应您的问题。
我很欣赏额外的细节,但我可能永远无法完全理解 sheet 在做什么。我认为正在发生的事情是,由于 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);1;-2)-UGEDAG(DATO(ÅR(Året!$B);1;3))+AG5*7;Året!$B:$B;0);"")
我认为它没有满足您的需求。我认为这将在星期一给出相同的结果:
=HVIS.FEJL(SAMMENLIGN(HELTAL(DATO(ÅR(Året!$B);1;-2)/7)*7+2+AG5*7;Året!$B:$B;0);"")
其中 HELTAL(DATO(ÅR(Året!$B$2);1;-2)/7)*7 给出前一年最后一个完整周的星期六(我认为 HELTAL 是 INT)和我们加 2 到星期一。这似乎更容易理解,因为将“+2”更改为“+3”会给你星期二:
=HVIS.FEJL(SAMMENLIGN(HELTAL(DATO(ÅR(Året!$B);1;-2)/7)*7+3+AG5*7;Året!$B:$B;0);"")
将其更改为“+5”会给你星期四
=HVIS.FEJL(SAMMENLIGN(HELTAL(DATO(ÅR(Året!$B);1;-2)/7)*7+5+AG5*7;Året!$B:$B;0);"")
由于我们是从周日开始的,我认为您不会看到使用周五 (+6) 或周六 (+7) 的现有公式所遇到的问题。
您可能需要稍微调整一下公式,但我认为这会让您更接近您的需要。
我必须承认,无论您对问题的描述如何,都没有明确定义。我从这里的所有讨论中收集到的是你想在 12 月 29 日之前弄清楚 'Monday'?是吗 ?如果这是绊脚石,那么这是一个巧妙的解决方案(假设 C3 的日期是 29/Dec):
=WORKDAY.INTL(C3,-1,"0111111")
将为您提供 12 月 29 日之前的日期,即星期一... 要在 12 月 29 日之前获得星期二,请使用此 -
=WORKDAY.INTL(C3,-1,"1011111")
请参阅公式的 'weekend' 部分,我们说这一天(我们想要的任何一天)是 FALSE(不是周末)其余都是周末(TRUE (1))...
希望您能够从这里构建剩余的公式....