Excel/VBA-今天是今年的第几周

微信公众号原文

系统:Windows 7
软件:Excel 2010

本豆介绍使用场景or困惑:

- 每个公司都有自己的工作日历,那么今天是今年第几周?

- 不同的公司答案可能是不一样的,可能是35周,可能是36周,也可能还有其它答案

- 要想回答今天是第几周,好像很简单的一个问题,但是仔细想想,其实不然,你觉得有哪几点需要考虑?

- 另外要想得到符合自己公司的周次,使用VBA如何实现?

本豆认为有以下两点需要考虑(欢迎补充)

  1. 一周的范围是什么,即哪一天是一周的开始(一周7天是共识啊)
  2. 每一年的第1周是如何定义的

那么具体这题怎么解?

  1. 关于一周的开始,常见的有两种,一种是周日,一种是周一
  2. 关于一年的第1周常用的也有两种方法:包含每年1月1日的那一周为第一周;一周中至少有四天在本年内,才算第一周
  3. 结合上面两种情况,也就是有四种可能性(2x2)
  4. 以2017年来看
  • 情况1:包含每年1月1日的那一周为第一周
    • 情况1.1:如果一周的开始是周日,那么2017-1-1到2017-1-7为一周,且1月1号也包括在内,则这周是第1
    • 情况1.2:如果一周的开始是周一,那么2017-1-2到2017-1-8为一周,1月1号不在其内,则该周为第2
  • 情况2:一周中至少有四天在本年内,才算第一周
    • 情况2.1:如果一周的开始是周日,那么2017-1-1到2017-1-7为一周,且大于4天在本年内,则这周是第1
    • 情况2.2:如果一周的开始是周一,那么2017-1-2到2017-1-8为一周,本年这周之前只有1号,不满足4天在本年内,所有2017-1-2到2017-1-8这周是第一个四天在本年内的周次,所有这周为第1

综上情况1.2和2.2对同一周,表示的周次信息是不同的,差一周,这就是同一天在不同公司却是不同的周次一个重要原因

日历

Excel/VBA-今天是今年的第几周_第1张图片
日历.jpg

VBA代码实现-个性化周次

  1. 为了不要搞得这么复杂,假设每周的第一天是周一
  2. 核心函数:Format
  3. Format(待转化变量,转化后的目标格式,一周的第一天,一年的第一周)
  4. 关于一年的一周,可选参数官方解释如下图

一年的第一周

Excel/VBA-今天是今年的第几周_第2张图片
1.JPG
Sub test1()
    Dim nowTime As Date
    nowTime = "2017/01/02"
    x1 = Format(nowTime, "ww", vbMonday, vbFirstJan1)
    x2 = Format(nowTime, "ww", vbMonday, vbFirstFourDays)
    Debug.Print ("x1=" & x1)
    Debug.Print ("x2=" & x2)
End Sub

代码截图

Excel/VBA-今天是今年的第几周_第3张图片
3.JPG

以上为本次的学习内容,下回见

如发现有错误,欢迎留言指出


更多精彩,请关注微信公众号
扫描二维码,关注本公众号

Excel/VBA-今天是今年的第几周_第4张图片
公众号底部二维码.jpg

你可能感兴趣的:(Excel/VBA-今天是今年的第几周)