VBA知识--日期


日常工作中,我们时常需要对数据按周或月或年来分类,从而生成相关图表。所以在VBA编程中,日期函数是一个非常重要的知识点,VBA里面的日期函数和excel函数的用法并不完全一样。本章节将就日期函数的运用做一个归纳总结。

  •  当月或上个月的第一天和最后一天

这里主要用到DateSerial 函数:DateSerial(yearmonthday)。每个月的最后一天实际上就是下个月的day为0(注意:不是当月的day为31,因为有的月份是30天)。

firstday_PastM = DateSerial(Year(Date), Month(Date) - 1, 1) '上个月第一天,Date函数返回当前的系统日期
lastday_PastM = DateSerial(Year(Date), Month(Date), 0) '上个月最后一天
firstday_CurrentM = DateSerial(Year(Date), Month(Date), 1) '当月第一天
lastday_CurrentM = DateSerial(Year(Date), Month(Date)+1, 0) '当月最后一天
  •   当天周数或周几

当天周数要用到DatePart函数:DatePart (interval, date, [ firstdayofweek, [ firstweekofyear ]])。DatePart 函数是一个非常强大的函数,通过它我们可以得到所在天所属周数、月数、季度等等,其语法包介绍如下:

Part 说明
interval 必需。 表示您要返回的时间间隔的字符串表达式
date 必需。 要计算的 Variant (Date) 值。
firstdayofweek 可选。 一个指定一周的第一天的常量。 如果未指定,则会假定为星期日。
firstweekofyear 可选。 一个指定一年的第一周的常量。 如果未指定,则会假定 1 月 1 日出现的那一周为第一周。

interval 参数具有以下设置:

Setting 说明
yyyy
q 季度
m
y 每年的某一日
d
w 工作日
ww
h 小时
n 分钟
s

 

firstdayofweek 参数具有以下设置:

常量 说明
vbUseSystem 0 使用 NLS API 设置。
vbSunday 1 周日(默认)
vbMonday 2 星期一
vbTuesday 3 星期二
vbWednesday 4 星期三
vbThursday 5 星期四
vbFriday 6 星期五
vbSaturday 7 星期六

 

firstweekofyear 参数包含以下设置:

表 4
常量 说明
vbUseSystem 0 使用 NLS API 设置。
vbFirstJan1 1 从 1 月 1 日所在的周开始(默认)。
vbFirstFourDays 2 从至少包含新的一年中的四天的那一周开始。
vbFirstFullWeek 3 从每年的第一个完整的星期开始。

这个时候interval选用ww,DatePart就要表示第几周, WeekNum = VBA.DatePart("ww", Date, vbMonday, vbFirstFourDays) 这就表示把星期一当作每周的第一天。

 

另外,我们可以用weekday函数来精确找到上一周的第一天和第二天。

firstdayW = Date - Weekday(Date) - 6 。'Weekday(date[,firstdayofweek]), 可选参数默认周日为第一天

lastdayW = Date - Weekday(Date)

  •  日期格式转换

日期格式:cdate函数将有效的日期和时间表达式转换为类型日期,一般用format(cdate(dt),”yyyy-mm-dd hh:mm:ss”)

Range(Cells(2, "o"), Cells(RowLast, "S")).NumberFormat = "@" '将格式设为文本格式,以便数据格式符合SPC要求
Cells(i, "n") = CDate(Right(Cells(i, "n"), 4) & "/" & Mid(Cells(i, "n"), 4, 2) & "/" & Left(Cells(i, "n"), 2)) '将日期文本格式转换为标准的日期格式

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM