楼主 wcymiss |
Q:生活中常有类似感恩节、母亲节等情况的节日,它们表示在每年的第几个星期的周几。如何编写一个自定义函数,含有年、月、周次、周几这四个参数,返回对应的日期?如:当在输入函数: 日期(2011,5,2,7 )时,就表示是2011年5月第二个星期的周日,即母亲节。 A:代码如下:
代码思路如下: 1、首先要了解,当 a 为正数时, - Int ( - a / 7 ) * 7 就相当于函数里的ceiling(a,7)的效果。 2、假设a为日期, - Int ( -a / 7 ) * 7,就是求得日期a之后(含a当天)的第一个周六的日期。 如果要求a之后的第n个周六,那就是 : - Int ( -a / 7 ) * 7 + ( n - 1 )*7 3、如果要需要求出周五的日期,因为:周五 = 周六+6 或者 周六 -1,公式的最后势必要 +6 或 -1,此时沿用”有借有还“的法则,公式最后 加6 了,公式前面就要先减6,也就是说, -int(-(a-6)/7)*7 +6才是a之后(含a当天)的第一个周五的日期。 4、套用公式: -int (- ( a - 6 ) / 7 ) * 7 + 6 + ( n - 1 )*7 a 为 指定月份的第一天,即为:DateSerial(Yea, Mon, 1)) n 为 Num 有借有还的参数,当求周六时,为0或7,当求周五时,为6(前减后加,下同),当求周四时,为5,……即为:wee mod 7 +1 5、套用后公式稍加变形即得出自定义代码里的公式。 6、参考:如何计算某月第三个星期日的日期?http://www.exceltip.net/thread-749-1-1.html 自定义日期.rar 其他补充:在工作表里使用此函数时,如果要省略参数,写成:=日期() 或 =日期(,,,) 都是可以的。 但如果在代码里需要调用该函数,省略参数时必须连逗号一起省略。如:日期(),日期(2011,,3)。但 日期(,,,)、日期(2011,,3,)的写法将会出错。 |
2楼 danysy |
这个好,谢谢楼主分享 |
3楼 chenlifeng |
可以就评分呀,感谢楼主对我的问题进行总结和分析,我正要问呢! |
4楼 CheryBTL |
哈哈 坐个板凳学习~~~~ |
5楼 liuguansky |
学习了。吴姐对日期 函数的理解很深。学习,我看到日期函数就头晕。 |
6楼 ppl2011 |
学习了,呵呵~~~ |
7楼 jinsan |
很好!收藏了! |