本文详细介绍了 VBA 中的 DAY 函数,并通过一个复杂的案例演示了如何在实际中使用这一函数。DAY 函数用于从给定的日期中提取“日”部分,返回值为 1 到 31 之间的整数。文章通过一个包含多个日期的数据表格,展示了如何使用 DAY 函数提取日期中的“日”部分,并根据提取的值进行分类处理。
在案例中,我们编写了一个 VBA 宏,自动从数据表格中提取“日”部分,并根据“日”的值将日期分为“月初”、“月中”和“月末”三类。代码中使用了 For 循环遍历数据、Select Case 语句进行分类,并通过表格展示了最终的运行结果。本文适合有一定 VBA 基础的读者,适合用于学习日期处理、数据分类等实际应用场景。
什么是 VBA DAY FUNCTION?
DAY 函数是 VBA(Visual Basic for Applications)中的一个内置函数,用于从给定的日期中提取“日”部分。它返回一个介于 1 到 31 之间的整数,表示该日期中的某一天。
VBA DAY FUNCTION 语法
DAY(date)
- date: 这是一个必需的参数,表示要提取“日”部分的日期。
案例演示
为了更好地理解 DAY 函数的使用,我们将通过一个复杂的案例来演示。假设我们有一个包含多个日期的数据表格,并且我们想要提取每个日期的“日”部分,并根据“日”部分的不同值进行分类。
数据表格
序号 | 日期 | 事件描述 |
1 | 2023-10-05 | 项目启动 |
2 | 2023-10-12 | 项目中期检查 |
3 | 2023-10-18 | 项目最终报告 |
4 | 2023-10-25 | 项目总结会议 |
5 | 2023-10-31 | 项目结束 |
VBA 代码
Sub ExtractAndClassifyDays()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1") ' 假设数据在Sheet1中
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Dim i As Long
Dim dayValue As Integer
Dim classification As String
' 在D列添加“日”列,在E列添加“分类”列
ws.Cells(1, 4).Value = "日"
ws.Cells(1, 5).Value = "分类"
For i = 2 To lastRow
' 提取日
dayValue = Day(ws.Cells(i, 2).Value)
ws.Cells(i, 4).Value = dayValue
' 根据日进行分类
Select Case dayValue
Case 1 To 10
classification = "月初"
Case 11 To 20
classification = "月中"
Case 21 To 31
classification = "月末"
Case Else
classification = "未知"
End Select
ws.Cells(i, 5).Value = classification
Next i
End Sub
代码解释
- 定义变量: 我们定义了一个 Worksheet 对象 ws 来引用当前工作簿中的 Sheet1。lastRow 变量用于获取数据的最后一行。
- 添加列标题: 我们在 D 列和 E 列分别添加了“日”和“分类”的列标题。
- 循环遍历数据: 我们使用 For 循环从第二行开始遍历每一行数据。
- 提取“日”部分: 使用 Day 函数从日期中提取“日”部分,并将其存储在 dayValue 变量中,然后将该值写入 D 列。
- 分类: 根据 dayValue 的值,我们使用 Select Case 语句将日期分为“月初”、“月中”和“月末”三类,并将结果写入 E 列。
运行结果
运行上述 VBA 代码后,数据表格将如下所示:
序号 | 日期 | 事件描述 | 日 | 分类 |
1 | 2023-10-05 | 项目启动 | 5 | 月初 |
2 | 2023-10-12 | 项目中期检查 | 12 | 月中 |
3 | 2023-10-18 | 项目最终报告 | 18 | 月中 |
4 | 2023-10-25 | 项目总结会议 | 25 | 月末 |
5 | 2023-10-31 | 项目结束 | 31 | 月末 |