VBA基础入门(37)如何给yymmdd这样的日期做加减?

论坛 期权论坛 期权     
VBA基础入门   2019-6-10 03:43   3150   0





对于yymmdd这样的日期,在加减处理上,和数值的加减,普通的日期加减有一些不一样。


注:文中代码部分可以左右滑动
例如,190131,再加上1天,并不是190132,而是190201。那么如何把单元格C3变换后的值写到C4里面呢?


第一种方案:
我们看看下面的代码:
  1. Sub Test01()
复制代码
  1.   Dim Mydate As String
复制代码
  1.   Mydate = Range("C3")
复制代码
  1.   Range("C4") = Mydate + 1
复制代码
  1. End Sub
复制代码
我们看看下面的结果:


显然,这样不行,这样是按照数值进行了加算,结果并不是我们想要的。那我们是不是把Mydate定义成Date类型就可以了呢?

第二种方案:
我们看看下面的代码:
  1. Sub Test02()
复制代码
  1.   Dim Mydate As Date
复制代码
  1.   Mydate = Range("C3")
复制代码
  1.   Range("C4") = Mydate + 1
复制代码
  1. End Sub
复制代码
       我们看看下面的结果:


显然,这样也不行,定义成了Date类型为什么还不行呢?
原因是,如果把Mydate定义成了Date类型,那么在上面代码第三行的赋值运算过程中,就相当于把190131强制转换成了Date类型,而转换的结果就是2420年的7月23日。

第三种方案:
我们看看下面的代码:
  1. Sub Test03()
复制代码
  1.   Dim Mydate As Date
复制代码
  1.   Mydate = Left(Range("C3"), 2) & "/" & Mid(Range("C3"), 3, 2) & "/" & Right(Range("C3"), 2)
复制代码
  1.   Range("C4") = Format(Mydate + 1, "YYMMDD")
复制代码
  1. End Sub
复制代码
我们看看下面的结果:




其实,最根本的原因是取得的变换前数据(单元格C3)中的数据格式并不是日期类型,而是默认的常规类型,所以我们在对数据进行处理的时候会产生问题,代码第二行就是把数据中间加上“
/ ”,把数据变成19/01/31后再进行处理,这么做就可以避免了方案二那种把190131转换成2420/07/23的问题了。


如果格式本身就是日期了,那么直接1就好了,免去了上面所出现的问题。





分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:15
帖子:3
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP