Excel函数:显示D1单元格的日期是yyyy年MM月第几周

        每天的记录要写日期,还要写第几周的内容;

        不想每次都写同样的日期,于是自己写了一个函数来计算单元格的时间是几几年几月第几周;

一周的周一在那个月,这一周的时间都算在周一所在的月份;

        例如:

                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->"二"
    )    
    & "周"
)

最后的结果就是:

        

菜鸟一枚.希望大家多多指导;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亓天大剩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值