Table of contents
虽然Microsoft Excel提供了一系列函数来处理工作日、月和年,但只有一个函数适用于周,即WEEKNUM函数。 因此,如果你正在寻找一种方法来从一个日期获得一个周数,WEEKNUM就是你想要的函数。
在这个简短的教程中,我们将简要介绍Excel WEEKNUM的语法和参数,然后讨论几个公式例子,演示如何使用WEEKNUM函数在Excel工作表中计算星期数。
Excel WEEKNUM函数--语法
WEEKNUM函数在Excel中用来返回一年中某一特定日期的周数(1-54之间的数字)。 它有两个参数,第一个是必须的,第二个是可选的。
WEEKNUM(serial_number, [return_type])- 序号 - 这可以是对包含该日期的单元格的引用,也可以是通过DATE函数输入的日期或通过其他公式返回的日期。
- 返回_类型 (可选) - 一个决定一周从哪天开始的数字。 如果省略,则使用默认类型1(一周从周日开始)。
以下是一份完整的清单 返回类型
在WEEKNUM公式中支持的值。
返回_类型 | 本周开始 |
1或17或省略 | 星期日 |
2或11 | 星期一 |
12 | 星期二 |
13 | 星期三 |
14 | 星期四 |
15 | 星期五 |
16 | 星期六 |
21 | 星期一(在系统2中使用,请见下面的细节。) |
在WEEKNUM函数中,两个不同的 周数系统 被使用。
- 系统1。 包含1月1日的一周被认为是一年中的第1周,并被编号为第1周。 在这个系统中,一周传统上从周日开始。
- 系统2。 这是ISO周日期系统,是ISO 8601日期和时间标准的一部分。 在这个系统中,一周从星期一开始,包含一年中第一个星期四的一周被认为是第1周。 它通常被称为欧洲周数系统,它主要用于政府和企业的财政年度和时间记录。
上面列出的所有返回类型都适用于系统1,除了返回类型21是用于系统2的。
注意:在Excel 2007和更早的版本中,只有选项1和2可用。 在Excel 2010和Excel 2013中只支持返回类型11至21。
用Excel WEEKNUM公式将日期转换为周数(从1到54)。
下面的截图演示了如何用最简单的方法从日期中获得周数。 =WEEKNUM(A2)
公式。
在上述公式中, 返回类型
参数被省略,这意味着使用默认的类型1--从周日开始的一周。
如果你想从一周中的其他日子开始,比如星期一,那么在第二个参数中使用2。
=weeknum(a2, 2)
例如,你可以通过使用DATE(年、月、日)函数在公式中直接指定日期,而不是引用一个单元格。
=weeknum(date(2015,4,15), 2)
上述公式返回16,这是包含2015年4月15日的一周的数字,一周的开始时间是星期一。
在现实生活中,Excel WEEKNUM函数很少单独使用,大多数情况下,你会把它与其他函数结合起来使用,根据周数进行各种计算,如进一步的例子所示。
如何将Excel中的周数转换为日期
正如你刚才所看到的,使用Excel WEEKNUM函数将一个日期变成一个星期的数字并不是什么大问题。 但是,如果你要寻找相反的情况,即将一个星期的数字转换成一个日期,怎么办? 唉,没有一个Excel函数可以直接做到这一点。 因此,我们将不得不构建自己的公式。
假设你在A2单元格中有一个年份,在B2单元格中有一个星期的数字,现在你想计算这个星期的开始和结束日期。
注意:这个公式的例子是基于ISO周数,一个星期从星期一开始。
的公式来返回 开始日期 本周的情况如下。
=date(a2, 1, -2) - weekday(date(a2, 1, 3)) + b2 * 7
其中A2为年份,B2为周数。
请注意,该公式将日期作为序列号返回,如果要将其显示为日期,你需要对单元格进行相应的格式化。 你可以在《改变Excel中的日期格式》中找到详细说明。 下面是该公式返回的结果。
当然,将周数转换为日期的公式并不简单,你可能需要花点时间来理解其中的逻辑。 无论如何,我将尽力为那些好奇心强的人提供有意义的解释。
如你所见,我们的公式由2部分组成。
date(a2, 1, -2) - weekday(date(a2, 1, 3))
- 计算前一年的最后一个星期一的日期。B2 * 7
- 将周数乘以7(一周的天数),得到该周的周一(开始日期)。
在ISO周数系统中,第1周是包含一年中第一个星期四的那一周。 因此,第一个星期一总是在12月29日和1月4日之间。 所以,为了找到这个日期,我们必须找到1月5日之前的那个星期一。
在Microsoft Excel中,你可以通过使用WEEKDAY函数从一个日期中提取一个星期的时间。 你可以使用下面的通用公式来获得任何给定日期之前的星期一。
日期 - 周日( 日期 - 2)如果我们的最终目标是找到A2年1月5日之前的星期一,我们可以使用以下DATE函数。
=date(a2,1,5) - weekday(date(a2,1,3))
但是我们实际上需要的不是今年的第一个星期一,而是前一年的最后一个星期一。 因此,你必须从1月5日减去7天,因此你在第一个DATE函数中得到-2。
=date(a2,1,-2) - weekday(date(a2,1,3))
与你刚刚学到的棘手的公式相比,计算 结束日期 要想得到该周的周日,你只需在该周的6天上加6天。 开始日期 ,即是说。 =D2+6
另外,你也可以在公式中直接加上6。
=date(a2, 1, -2) - weekday(date(a2, 1, 3)) + b2 * 7 + 6
为了确保公式总是提供正确的日期,请看下面的截图。 上面讨论的开始日期和结束日期公式分别被复制到D和E栏。
在Excel中把周数转换为日期的其他方法
如果上述基于ISO周日期系统的公式不能满足你的要求,请尝试以下解决方案之一。
公式1:包含1月1日的一周为第1周,周一至周日的一周
正如你所记得的,前面的公式是基于ISO日期系统工作的,其中每年的第一个星期四被认为是第1周。 如果你基于一个日期系统工作,其中包含1月1日的一周被认为是第1周,使用以下公式。
开始日期。
=date(a2,1,1) - weekday(date(a2,1,1),2) + (b2-1)*7 + 1
结束日期。
=date(a2,1,1)- weekday(date(a2,1,1),2) + b2*7
公式2:包含1月1日的一周为第1周,日-日周
这些公式与上述公式类似,唯一不同的是它们是为周日-周六这一周写的。
开始日期。
=date(a2,1,1) - weekday(date(a2,1,1),1) + (b2-1)*7 + 1
结束日期。
=date(a2,1,1)- weekday(date(a2,1,1),1) + b2*7
公式3.总是从1月1日开始计算,周一至周日一周
以前的公式返回第1周的周一(或周日),不管是今年还是前一年,这个开始日期公式总是返回 1月1日 作为第1周的开始日期,不管是哪一天。 以此类推,结束日期公式总是返回 12月31日 在所有其他方面,这些公式的作用与上述公式1相似。
开始日期。
=max(date(a2,1,1), date(a2,1,1) - weekday(date(a2,1,1),2) + (b2-1)*7 + 1)
结束日期。
=min(date(a2+1,1,0), date(a2,1,1) - weekday(date(a2,1,1),2) + b2*7)
公式4.总是从1月1日开始计算,周日-周六周
要计算周日至周六一周的开始和结束日期,只需在上述公式中做一个小小的调整即可 :)
开始日期。
=max(date(a2,1,1), date(a2,1,1) - weekday(date(a2,1,1),1) + (b2-1)*7 + 1)
结束日期。
=min(date(a2+1,1,0), date(a2,1,1) - weekday(date(a2,1,1), 1) + b2*7)
如何从周数中获取月份
为了得到一个与周数相对应的月份,你可以按照这个例子中的解释,找到某个星期的第一天,然后把这个公式包在Excel的MONTH函数中,像这样。
=month(date(a2, 1, -2) - weekday(date(a2, 1, 3)) + b2 * 7)
注意:请记住,上述公式的工作基础是 ISO周日期系统 例如,在2016年,第一个星期四是1月7日,这就是为什么第1周开始于2016年1月4日。
如何在一个月内获得一个星期的数字(从1到6)。
如果你的业务逻辑需要将一个特定的日期转换为相应月份内的周数,你可以使用WEEKNUM、DATE和MONTH函数的组合。
假设A2单元格包含原始日期,使用下面的公式计算一个星期的开始日期 星期一 (注意WEEKNUM的return_type参数中的21)。
=weeknum($a2,21)-weeknum(date(year($a2), month($a2),1),21) +1
从2012年1月1日开始的一周内 星期日 ,省略return_type参数。
=weeknum($a2)-weeknum(date(year($a2), month($a2),1))+1
如何通过周数对数值进行求和并找出平均值
现在你知道了如何在Excel中把日期转换成周数,让我们看看如何在其他计算中使用周数。
假设,你有一些每月的销售数字,你想知道每个星期的总数。
首先,让我们找出与每项销售对应的周数。 如果你的日期在A栏,销售在B栏,复制 =WEEKNUM(A2)
从C2单元格开始的C列的公式。
然后,在另一列(比如E列)中列出一周的数字,用下面的SUMIF公式计算出每一周的销售额。
=sumif($c$2:$c$15, $e2, $b$2:$b$15)
其中E2为周数。
在这个例子中,我们处理的是3月份的销售清单,所以我们有第10到14周的数字,如下面的截图所示。
以类似的方式,你可以计算出某一周的平均销售额。
=averageif($c$2:$c$15, $e2, $b$2:$b$15)
如果带有WEEKNUM公式的辅助列不能很好地适应你的数据布局,我很遗憾地告诉你,没有简单的方法可以摆脱它,因为Excel WEEKNUM是不接受范围参数的函数之一。 因此,它不能在SUMPRODUCT或任何其他数组公式中使用,如MONTH函数中的类似情况。
如何根据周数来突出显示单元格
假设你在某一列中有一个长长的日期列表,你想只突出那些与某一周有关的日期。 你所需要的是一个带有WEEKNUM公式的条件格式化规则,类似于这样。
=weeknum($a2)=10
正如下面的截图所示,该规则突出了第10周内的销售,也就是2015年3月的第一周。 由于该规则适用于A2:B15,所以它突出了两列的值。 你可以在本教程中了解更多关于创建条件格式化规则的信息:Excel基于另一单元格值的条件格式化。
这就是如何在Excel中计算周数,将周数转换为日期,并从日期中提取周数。 希望你今天学到的WEEKNUM公式能在你的工作表中证明是有用的。 在下一个教程中,我们将谈论在Excel中计算年龄和年份。 谢谢你的阅读,希望下周再见!