日常工作中,我們時常需要對數據按周或月或年來分類,從而生成相關圖表。所以在VBA編程中,日期函數是一個非常重要的知識點,VBA里面的日期函數和excel函數的用法並不完全一樣。本章節將就日期函數的運用做一個歸納總結。
-
當月或上個月的第一天和最后一天
這里主要用到DateSerial 函數:DateSerial(year, month, day)。每個月的最后一天實際上就是下個月的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 參數包含以下設置:
常量 | 值 | 說明 |
---|---|---|
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)) '將日期文本格式轉換為標准的日期格式