每天的记录要写日期,还要写第几周的内容;
不想每次都写同样的日期,于是自己写了一个函数来计算单元格的时间是几几年几月第几周;
一周的周一在那个月,这一周的时间都算在周一所在的月份;
例如:
D1单元格是一个日期类型的内容;
我要把他转换成上述格式,例如:
可以看一下日历:
这是第四周的周一;
下面是我的函数,为了方便查看Excel函数用回车分开了:
=IF(D1="",
"",
YEAR(D1) & "年" &
IF(DAY(D1)-WEEKDAY(D1,2)<0,
TEXT(MONTH(D1-1),"0"),
TEXT(MONTH(D1),"0")
) & "月第" &
CHOOSE(
IF(DAY(D1)-WEEKDAY(D1,2)<0,
IF(DAY(EOMONTH(D1, -2) + 1)-WEEKDAY(EOMONTH(D1, -2) + 1)<0,
WEEKNUM(EOMONTH(D1, 0) - 1)-WEEKNUM(DATE(YEAR(D1), MONTH(D1), 1) - IF(DAY(D1)=1, 1, 0))-1,
WEEKNUM(EOMONTH(D1, 0) - 1)-WEEKNUM(DATE(YEAR(D1), MONTH(D1), 1) - IF(DAY(D1)=1, 1, 0))
),
IF(WEEKDAY(DATE(YEAR(D1), MONTH(D1), 1),2)=1,
WEEKNUM(D1,2)-WEEKNUM(DATE(YEAR(D1), MONTH(D1), 1),2)+1,
WEEKNUM(D1,2)-WEEKNUM(DATE(YEAR(D1), MONTH(D1), 1),2)
)
),
"一","二","三","四","五","六"
)
& "周"
)
--------------------------------------------------------------------------------------------------------------------------------
这块代码就是很简单的,计算D1单元格是几几年几月;
=IF(D1="",
"",
YEAR(D1) & "年" &
IF(DAY(D1)-WEEKDAY(D1,2)<0,
TEXT(MONTH(D1-1),"0"),
TEXT(MONTH(D1),"0")
) & "月第"
---------------------------------------------------------------------------------------------------------------------------------
因为我是要,算周一在的那个月,而且就算这周的后面几天在下个月,也要算在上个月的最后一周;
CHOOSE(
IF(DAY(D1)-WEEKDAY(D1,2)<0,//用日期数 - 星期数 < 0就是上个月最后一周
IF(DAY(EOMONTH(D1, -2) + 1)-WEEKDAY(EOMONTH(D1, -2) + 1)<0,//要判断D1是上个月的最后一周是第几周,要先判断
//上个月第一天是不是上上个月最后一周的
//按我的要求,一个月的第一周应该是第一个周一所在的一整周
//同样的方法: 日期数 - 星期数 < 0 就是上个月最后一周
WEEKNUM(EOMONTH(D1, 0) - 1)-WEEKNUM(DATE(YEAR(D1), MONTH(D1), 1) - IF(DAY(D1)=1, 1, 0))-1,//那就要用两个周数相减,再减1
WEEKNUM(EOMONTH(D1, 0) - 1)-WEEKNUM(DATE(YEAR(D1), MONTH(D1), 1) - IF(DAY(D1)=1, 1, 0))//否则不用再减1
),
IF(WEEKDAY(DATE(YEAR(D1), MONTH(D1), 1),2)=1,//D1所在月份的第一天是星期一,
WEEKNUM(D1,2)-WEEKNUM(DATE(YEAR(D1), MONTH(D1), 1),2)+1,//那两个周数相减要+1,因为第一天的那周算第一周
WEEKNUM(D1,2)-WEEKNUM(DATE(YEAR(D1), MONTH(D1), 1),2)//否则不用
)
),
"一","二","三","四","五","六"//匹配中文 1->"一", 2->"二"
)
& "周"
)
最后的结果就是:
菜鸟一枚.希望大家多多指导;