[分享][散分]写了个取日期在第几周的函数

Snowdust 2010-01-08 03:47:34
加精
今天有个同事问我,在EXCEL中如何写函数取日期在第几周,但稍微有些不同的是一年的最初几天如果接着上一年要算到上一年中去,比如说2010年1月2日,结果应该是52,而不是1。



粗略一样,这个函数其实蛮复杂的,写了很多次,都在某些情况下得不到正确的结果,最后这样成功了:



=IF(AND(WEEKDAY(DATE(YEAR(A1),1,1),2) > 1,FLOOR(DATEDIF(DATE(YEAR(A1),1,1),A1+WEEKDAY(DATE(YEAR(A1),1,1)-8,2),"D")/7,1)=0), FLOOR(DATEDIF(DATE(YEAR(A1)-1,1,1),DATE(YEAR(A1),1,1)+WEEKDAY(DATE(YEAR(A1)-1,1,1)-8,2),"D")/7,1), FLOOR(DATEDIF(DATE(YEAR(A1),1,1),A1+WEEKDAY(DATE(YEAR(A1),1,1)-8,2),"D")/7,1))



其中A1是要计算的单元格,另外这个是按照中国的习惯,也就是说一周是从星期一开始到星期日结束的,如果要按照美国的习惯,只要将WEEKDAY的第2个参数改成1就行了。



为了验证正确性,我还做了个EXCEL文件,结果如下:



A1 A2

2009-12-18 50
2009-12-19 50
2009-12-20 50
2009-12-21 51
2009-12-22 51
2009-12-23 51
2009-12-24 51
2009-12-25 51
2009-12-26 51
2009-12-27 51
2009-12-28 52
2009-12-29 52
2009-12-30 52
2009-12-31 52
2010-01-01 52
2010-01-02 52
2010-01-03 52
2010-01-04 1
2010-01-05 1
2010-01-06 1
2010-01-07 1
2010-01-08 1
2010-01-09 1
2010-01-10 1
2010-01-11 2
2011-12-28 52
2011-12-29 52
2011-12-30 52
2011-12-31 52
2012-01-01 52
2012-01-02 1
2012-01-03 1
2012-01-04 1
2012-01-05 1
2012-01-06 1
2012-01-07 1
2012-12-28 52
2012-12-29 52
2012-12-30 52
2012-12-31 53
2013-01-01 53
2013-01-02 53
2013-01-03 53
2013-01-04 53
2013-01-05 53
2013-01-06 53
2013-01-07 1
2013-01-08 1
2013-01-09 1
2013-01-10 1
2013-01-11 1
2013-01-12 1
2013-01-13 1
2013-01-14 2
2013-01-15 2
2013-01-16 2
2013-01-17 2
2013-12-28 51
2013-12-29 51
2013-12-30 52
2013-12-31 52
2014-01-01 52
2014-01-02 52
2014-01-03 52
2014-01-04 52
2014-01-05 52
2014-01-06 1
2014-01-07 1
2014-01-08 1
2017-12-28 52
2017-12-29 52
2017-12-30 52
2017-12-31 52
2018-01-01 1
2018-01-02 1
2018-01-03 1
2018-01-04 1
2018-01-05 1
2018-01-06 1
2018-01-07 1
2018-01-08 2
2018-01-09 2
2018-01-10 2


个人感觉这个函数比较复杂,但一时也想不到改进的办法。如果您有更好的方法,请不要吝啬哦。

本文博客地址:http://blog.csdn.net/Snowdust/archive/2010/01/08/5158925.aspx
...全文
2058 187 打赏 收藏 转发到动态 举报
写回复
用AI写文章
187 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangbin42 2010-12-08
  • 打赏
  • 举报
回复
不错,哦!收藏了
lyp0797 2010-11-26
  • 打赏
  • 举报
回复
哦!原来如此
liyuehai060911 2010-07-02
  • 打赏
  • 举报
回复
datepart(hour,getdate()),一算就知道了啊!
tthoy 2010-04-18
  • 打赏
  • 举报
回复
够长的,这个公式,研究中
xltsxl 2010-04-11
  • 打赏
  • 举报
回复
受益非浅,谢谢
zhfshn2008 2010-03-26
  • 打赏
  • 举报
回复
牛人啊
zwhe 2010-01-14
  • 打赏
  • 举报
回复
mark
夜鹰 2010-01-14
  • 打赏
  • 举报
回复
又仔细看了一遍,学习~
leida23 2010-01-14
  • 打赏
  • 举报
回复
侃侃
le562451 2010-01-14
  • 打赏
  • 举报
回复
复杂
luxi0194 2010-01-13
  • 打赏
  • 举报
回复
UP
...
Snowdust 2010-01-13
  • 打赏
  • 举报
回复
[Quote=引用 179 楼 tlvc 的回复:]
我给个简单,好理解的
A1为日期
=CEILING(((DATE(YEAR(A1),MONTH(A1),DAY(A1))-((7-WEEKDAY(DATE(YEAR(A1),1,1),2))+DATE(YEAR(A1),1,1))))/7,1)+1
[/Quote]
你那个函数是有问题的,你在A1中输入"2010-1-1"试试。
wind214 2010-01-13
  • 打赏
  • 举报
回复
好的,看一下。
tlvc 2010-01-13
  • 打赏
  • 举报
回复
我给个简单,好理解的
A1为日期
=CEILING(((DATE(YEAR(A1),MONTH(A1),DAY(A1))-((7-WEEKDAY(DATE(YEAR(A1),1,1),2))+DATE(YEAR(A1),1,1))))/7,1)+1
Delta 2010-01-13
  • 打赏
  • 举报
回复
谢谢分享
huwenjin930 2010-01-12
  • 打赏
  • 举报
回复
呵呵, 不错不错
J20082020 2010-01-12
  • 打赏
  • 举报
回复
jf
xuguv 2010-01-12
  • 打赏
  • 举报
回复
佩服!!
skyctr 2010-01-12
  • 打赏
  • 举报
回复
mark
jie_lucy1988 2010-01-12
  • 打赏
  • 举报
回复
学习!!!!!!!!
加载更多回复(167)

6,210

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office应用
社区管理员
  • Microsoft Office应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧