对于EXCEL里的日期,有常用函数year, month, day 来获取日期的年月日。在VBA里面也支持同样的函数。假如单元格A1里面的日期为2021/06/28。那我们可以用下面的方法获取年月日
'获取年
year=Year(Range("A1"))
'获取月
month=Month(Range("A1"))
'获取日
day=Day(Range("A1"))
这里包含几个种类,比如两个日期之间的天数、两个日期之间的月份差、两个日期之间的年份差。对于这个的运算可以使用VBA DateDiff()这个函数。
DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]])
Interval - 一个必需的参数。 它可以采用以下值。
- d - 一年中的一天
- m - 一年中的月份
- y - 一年中的年份
- yyyy - 年份
- w - 工作日
- ww - 星期
- q - 季度
- h - 小时
- m - 分钟
- s - 秒钟
假如在A1和B1分列存储两个日期。那么获取他们的两个日期之间间隔可以用下列方式。
'天数的差异
DateDiff("d",range("A1"),Range("B1"))
'月份的差异
DateDiff("m",range("A1"),Range("B1"))
'年份的差异
DateDiff("y",range("A1"),Range("B1"))
这个函数的好处在于,我们不用分别取年月日然后在进行换算得到差值。
假如我希望得到一个序列,分别是2021/1/1,2021/2/1,2021/3/1…. 这里最简单的做法是用EXCEL数据拖动的方式来实现。但是如果条件改变了,要获得的每个月最后一天的日期,即2021/1/31,2021/2/28,2021/3/31… 这里又如何实现呢?
在EXCEL里面有两个函数可以使用。分别是EDate()与EOMONTH()。这两个函数的解释如下。
vb
EDATE(start_date, months)
'如果计算2021/1/31后面的一个月的日期,这里会得到2021/2/28
EDATE("2021/1/31",1)
¨G2G
vb
EOMONTH(start_date, months)
'2021/1/1后面一个月的最后一天,及2021/2/28
EOMONTH("2021/1/1", 1)
¨G3G
vb
Sub GETDATE()
'设定循环
For i = 0 To 11
'起始月份
dd = "2021/1/1"
'VBA调用EXCEL函数EoMonth
newdate = WorksheetFunction.EoMonth(dd, i)
¨K13K
End Sub