VBA日期功能(宏的12种用途及示例)

  • Share This
Hugh West

在Microsoft Visual Basic应用程序中,日期函数或任何与日期有关的概念对于在你的数据集中执行各种操作是必不可少的。 你可能会发现自己在各种情况下必须使用这些函数。 在本教程中,你将通过适当的例子和适当的说明来学习VBA的日期函数。 此外,我们将为你提供多种日期函数你可以在你的工作表中实现。

下载实践工作手册

VBA Date.xlsm的用途

VBA日期函数简介

Excel将日期分类在 日期/时间 它是一个内置函数,我们可以在VBA宏中使用它来执行任何与日期有关的操作。

在你开始使用Date函数之前,你必须了解一下 VBA中的日期变量 .

⏺ 语法

日期()

⏺ 论点解释

没有任何争论。

⏺回报

返回当前日期。

⏺ 可用于

Excel for Office 365, Excel 2019, Excel 2016, Excel 2013, Excel 2011 for Mac, Excel 2010, Excel 2007, Excel 2003, Excel XP, Excel 2000

⏺ 示例

如你所知,没有参数,你只能像下面这样直接输入。

 Sub vba_date() Dim current_date As Date current_date = Date MsgBox current_date End Sub 

当我们使用Date函数时,我们在VBA代码中不给任何括号,就像这个例子一样。

输出 :

你应该学习的VBA中的12个日期函数

现在,在接下来的章节中,我们将向你展示一些额外的日期函数,你可以在VBA中用于许多目的。 阅读这些章节,了解在VBA中处理日期的每一种可能的方法。 我们建议你把它们放在你的武器库中。 它肯定会提高你的知识。

1.VBA中的DateAdd函数为日期

在VBA中,我们使用DateAdd函数在一个特定的日期中添加天数。 之后,它将返回结果日期。

语法。

DateAdd(区间, 数字, 日期)

争论。

间。 它是必需的。字符串表达式是你要添加的时间间隔。

数。 这是一个数字表达式,是你想添加的间隔数。 它可以是正数(获得未来的日期)或负数(获得过去的日期)。

日期。 原始日期/时间。

现在 间隔 参数可以有以下设置。

yyyy - 年

q - 季度

m - 月份

y - 一年中的一天

d -

w - 平日里

ww -

h - 一小时

n - 分钟

s - 第二次

代码摘录 :

 Sub dateadd_function() Dim result_Date As Date result_Date = DateAdd("d", 15, "1/31/2022") MsgBox result_Date End Sub 

输出。

正如你所看到的,它在VBA的当前日期中添加了15个日期。

阅读更多。 如何在VBA中使用IsDate函数(3个例子)

2.VBA中的DateDiff函数

DateDiff函数返回一个变量(Long),确定两个指定日期之间的时间间隔数。

语法 :

DateDiff(interval, date1, date2, [ firstdayofweek, [ firstweekofyear ]] )

争论。

间。 它是必需的。字符串表达式是你要添加的时间间隔字符串表达式是你用来计算两个日期之间区别的时间间隔。

date1,date2 : 要求;变量(日期)。 你想在计算中使用的两个日期。

每周的第一天。 可选的,定义一周的第一天的常数,如果不是固定的,就假定是星期天。

年的第一个星期。 可选的,确定一年中第一周的常数。 如果没有设置,第一周应该是1月1日出现的那一周。

现在 间隔 参数可以有以下设置。

yyyy - 年

q - 季度

m - 月份

y - 一年中的一天

d -

w - 平日里

ww -

h - 一小时

n - 分钟

s - 第二次

ǞǞǞ 每周第一天 参数有这些设置。

淘宝网 - 利用星期天作为一周中最重要的一天。

vbMonday - 采用周一作为一周的第一天。

淘宝网 - 操作星期二为一周的第一天。

vbWednesday - 采用星期三作为一周的第一天。

vbThursday - 运作星期四为一周中的相当一天。

纪念日 - 采用星期五作为一周的第一天。

礼拜六 - 运作星期六为一周的第一天。

vbUseSystemDayOfTheWeek - 使用由你的设备设置定义的一周中的第一天。

ǞǞǞ 年度第一周 有这些设置。

vbFirstJan1 - 利用包含1月1日的一周时间。

vbFirstFourDays - 雇用在新的一年中至少有四天的第一个星期。

vbFirstFullWeek - 在一年中的第一个完整的星期运作。

淘宝网 - 使用由你的设备位置定义的一年中的第一周。

代码摘录。

 Sub DateDiff_Function() Dim result As Long result = DateDiff("d", "1/31/2022", "2/12/2022") MsgBox result End Sub 

输出 :

最后,它在VBA中返回两个日期之间的差异。

阅读更多。 如何在Excel中使用VBA的DateDiff函数(9个例子)

3.DatePart函数为日期

DatePart函数返回一个变量(整数),包含所提供日期的定义部分。

语法 :

DatePart(interval, date, [ firstdayofweek, [ firstweekofyear ]])

争论。

间。 它是必需的。字符串表达式是你要添加的时间间隔字符串表达式是你用来计算两个日期之间区别的时间间隔。

日期。 Required; Variant (Date). 你想在计算中使用的日期。

每周的第一天。 可选的,定义一周的第一天的常数,如果不是固定的,就假定是星期天。

年的第一个星期。 可选的,确定一年中第一周的常数。 如果没有设置,第一周应该是1月1日出现的那一周。

现在 间隔 参数可以有以下设置。

yyyy - 年

q - 季度

m - 月份

y - 一年中的一天

d -

w - 平日里

ww -

h - 一小时

n - 分钟

s - 第二次

ǞǞǞ 每周第一天 参数有这些设置。

淘宝网 - 利用星期日作为一周中最重要的一天。

vbMonday - 采用周一作为一周的第一天。

淘宝网 - 操作星期二为一周的第一天。

vbWednesday - 采用星期三作为一周的第一天。

vbThursday - 运作星期四为一周中的相当一天。

纪念日 - 采用星期五作为一周的第一天。

礼拜六 - 运作星期六为一周的第一天。

vbUseSystemDayOfTheWeek - 使用由你的设备设置定义的一周中的第一天。

ǞǞǞ 年度第一周 有这些值。

vbFirstJan1 - 包括1月1日在内的一周都在运营。

vbFirstFourDays - 使用第一周,在新的一年里最多拥有不足四天的时间。

vbFirstFullWeek - 利用一年中的第一个完整星期。

淘宝网 - 采用你的设备位置所选择的一年中的第一个星期。

代码摘录 :

 Sub DatePart_Function() Dim result As Integer result = DatePart("m", "10/11/2022") MsgBox result End Sub 

输出 :

通过这种方式,你可以在VBA代码中使用这个日期函数。

阅读更多。 如何在Excel中使用VBA的FileDateTime函数(3种使用方法)

4.DateSerial函数

你可以根据输入的年、月、日看到一个日期,使用 The 日期序列 功能。

语法。

DateSerial(年, 月, 日)

争论。

- 必填项:100至9999之间的数字,包括在内,或象征年份的数字表达。

- 必填项,定义月份的整数值。

- 必填项,描述日期的整数值。

代码摘录。

 Sub date_serial() Dim date_special As Date date date_special = DateSerial(2022, 1, 11) MsgBox date_special End Sub 

输出 :

阅读更多。 如何在Excel中使用VBA TimeSerial (3个例子)

4.VBA DateValue函数

现在,我们使用DateValue函数来定义一个日期。

语法 :

DateValue(date)

争论。

在这里, 日期 参数通常是一个字符串表达式,描述从100年1月1日到9999年12月31日的一个日期。 无论如何,这个日期还可以是任何可以象征一个日期、一个时间或该范围内的日期和时间的表达式。

代码摘录。

 Sub Date_value() Dim result As Date result = DateValue("January, 10, 2022") MsgBox result End Sub 

输出 :

正如你所看到的,我们成功地在VBA代码中使用了日期函数。

5.VBA中的日函数

它返回一个变量(Integer),决定了1到31之间的实数,传达了月份的日期。

语法 :

日(日期)

争论。

所需的日期参数是任何变量、数字表达式、字符串表达式或任何组合。 它代表一个日期。 如果日期包括Null,它也将返回Null。

代码摘录。

 Sub day_function() Dim date1, the_day date1 = #12/12/2023# the_day = Day(date1) MsgBox the_day End Sub 

输出。

正如你所看到的,使用VBA代码,我们发现给定日期的日子是12。

相关内容。 Excel中的VBA格式功能(8种用途及实例)

6.VBA月函数为日期

它返回一个变量(Integer),定义了1到12之间的实数,传达了该年的月份。

语法 :

月(日期)

争论。

所需的日期参数是任何变量、数字表达式、字符串表达式或任何组合。 它代表一个日期。 如果日期包括Null,它也将返回Null。

代码摘录。

 Sub month_function() Dim date1, the_month date1 = #12/12/2023# the_month = Month(date1) MsgBox the_month End Sub 

输出。

相关内容。 如何在Excel中使用VBA右键函数(6个例子)

类似读物

  • 如何使用VBA的Environ函数(4个例子)
  • 如何在Excel中使用VBA和函数(4个例子)
  • Excel中的VBA If - Then - Else语句(4个例子)
  • 如何在Excel中使用VBA的Abs函数(9个例子)
  • 如何在Excel VBA中使用串联法(4种方法)

7.月名功能

它返回一个演示指定月份的字符串。

语法 :

MonthName(month, [ abbreviate ])

争论。

月。 它是必填的。 月份的数字标题。 例如,1月是1,2月是2,以此类推。

缩略语。 它是可选的。 布尔值,表明月名是否要被缩写。 如果跳过,默认为False,表示月名不被缩写。

代码摘录。

 Sub MonthName_Function() Dim month_name As String month_name = MonthName(9, True) MsgBox month_name End Sub 

输出。

正如你所看到的,我们通过这个VBA日期函数找到了月份名称。

8.工作日的功能

它返回一个 变体 ( 整数 )拥有一个表示星期几的实数。

语法 :

周日(date, [ firstdayofweek ])

争论。

日期。 所需的日期参数是任何变量、数字表达式、字符串表达式或任何组合。 它代表一个日期。 如果日期包括Null,它也将返回Null。

每周的第一天。 可选的,定义一周的第一天的常数。 如果不固定,则假定为星期日。

ǞǞǞ 每周第一天 参数有这些设置。

淘宝网 - 利用星期天作为一周中最重要的一天。

vbMonday - 采用周一作为一周的第一天。

淘宝网 - 操作星期二为一周的第一天。

vbWednesday - 采用星期三作为一周的第一天。

vbThursday - 运作星期四为一周中的相当一天。

纪念日 - 采用星期五作为一周的第一天。

礼拜六 - 运作星期六为一周的第一天。

vbUseSystemDayOfTheWeek - 使用由你的设备设置定义的一周中的第一天。

返回参数

现在,这个函数返回一个整数。 因此,这些整数的含义如下。

1 - 星期日

2 - 星期一

3 - 星期二

4 - 星期三

5 - 星期四

6 - 星期五

7 - 星期六

代码摘录。

 Sub Weekday_Function() Dim week_day As Integer week_day = Weekday("4/27/2022") MsgBox week_day End Sub 

输出。

正如你所看到的,VBA日期函数返回4,这意味着星期三。

相关内容。 如何在Excel VBA中使用修复函数(4个例子)

9.VBA WeekdayName函数

返回一个字符串,显示一周中被限制的日子。

语法 :

WeekdayName(weekday, abbreviate, firstdayofweek)

争论。

平日里。 必需的字段。 一周的数字标识。 每一天的数字值依赖于firstdayofweek设置的设定。

缩略语。 这是可选的,是一个布尔值,意味着是否要缩短工作日的名称。 如果跳过,默认为 "假",这意味着工作日的名称不会被缩写或缩短。

每周的第一天。 可选的字段。 表示一周中的第一天的数值。 它可以有各种数值。

ǞǞǞ 每周第一天 参数可以有后续值。

淘宝网 - 利用星期天作为一周中最重要的一天。

vbMonday - 采用周一作为一周的第一天。

淘宝网 - 操作星期二为一周的第一天。

vbWednesday - 采用星期三作为一周的第一天。

vbThursday - 运作星期四为一周中的相当一天。

纪念日 - 采用星期五作为一周的第一天。

礼拜六 - 运作星期六为一周的第一天。

vbUseSystemDayOfTheWeek - 使用由你的设备设置定义的一周中的第一天。

代码摘录。

 Sub WeekdayName_Function() Dim weekday_name As String weekday_name = WeekdayName(6) MsgBox weekday_name End Sub 

输出。

正如你所看到的,上面的VBA代码显示了工作日的名称。

相关内容:如何在Excel中使用VBA WeekdayName函数(2个例子)

10.VBA日期中的年份功能

它返回一个变量(Integer),有一个表达年份的实数。

语法 :

年份(日期)

争论。

所需的日期参数是任何变量、数字表达式、字符串表达式或任何组合。 它代表一个日期。 如果日期包括Null,它也将返回Null。

代码摘录。

 Sub year_function() Dim date1, the_year date1 = #12/12/2023# the_year = Year(date1) MsgBox the_year End Sub 

输出。

这里你可以看到实现VBA代码后给定日期的年份。

阅读更多。 如何在Excel中使用VBA替换功能(11种应用)

11.FormatDateTime函数

该函数返回一个格式化为日期或时间的表达式。

语法 :

FormatDateTime(Date, [ NamedFormat ])

争论。

日期。 必需的字段。 需要格式化的日期表达。

NamedFormat。 这是可选的,它是一个显示日期/时间格式的数字值。 如果省略,它使用了 vbGeneralDate .

ǞǞǞ 命名格式(NamedFormat 可以有以下值。

vbGeneralDate(0)。 显示日期和/或时间。 如果有日期部分,则表示为短日期。 如果有时间部分,则表示为长时间。 如果存在这两个部分,则显示这两个部分。

vbLongDate(1): 利用你的计算机区域设置中选择的长日期配置来描绘一个日期。

vbShortDate(2)。 通过操作你的计算机区域设置中指定的短日期格式来显示一个日期。

vbLongTime(3): 通过采用你的计算机区域设置中指定的时间格式来显示时间。

vbShortTime(4): 通过使用24小时格式(hh:mm)显示时间。

代码摘录。

 Sub FormatDateTime_Function() d = ("2022-02-03 18:25") MsgBox ("Format 1 : " & FormatDateTime(d)) MsgBox ("Format 2 : " & FormatDateTime(d, 1)) MsgBox ("Format 3 : " & FormatDateTime(d, 2)) MsgBox ("Format 4 : " & FormatDateTime(d, 3) ) MsgBox ("Format 5 : " & FormatDateTime(d, 4) ) End Sub 

输出。

运行该代码后,你将看到以下对话框。

在这里,你可以看到VBA中所有的时间和日期格式。

阅读更多。 如何使用VBA的TimeValue函数(6个相关例子)

12.VBA CDate函数

该函数将一个有效的日期和时间表达式转换为一个典型的日期。

语法 :

CDate(date)

争论。

所需的日期参数是任何变量、数字表达式、字符串表达式或任何组合。 它代表一个日期。 如果日期包括Null,它也将返回Null。

代码摘录。

 Sub Cdate_Function() Dim date1 As Variant Dim date2 As Variant date1 = CDate("Mar 11 2022") date2 = CDate("29 Sep 2023") MsgBox (" First date : " & date1 & vbCrLf & "Second date : " & date2) End Sub 

输出。

正如你所看到的,我们的VBA代码只是返回了一个典型的Excel的日期格式。

相关内容。 如何在Excel中使用VBA DIR函数(7个例子)

VBA日期的例子

在下面的章节中,我们将为你提供三个实用合适的使用VBA的日期例子。 这些例子将包含与日期有关的问题及其解决方案。 我们建议你阅读并练习所有这些例子,以提高你的VBA知识。 让我们开始吧。

1.在VBA中使用日期计算逾期天数

逾期的意思是发生晚了,或过了最后期限。 逾期,特别是过了最后期限或太晚了,无法满足要求。

假设你必须提交周日到期的作业,但现在是周二,你还没有提交,你可以把它称为 "两个逾期日"。

看一下下面的数据集。

在这里,我们有一个一些学生和他们的作业提交日期的数据集。 你可以看到最后的提交日期。 我们的目标是根据提交日期找到逾期的日期。 现在,为了完成这个任务,请按照以下步骤进行。

📌 阶梯

  • 首先,按 Alt+F11 在你的键盘上按一下,打开VBA编辑器。
  • 然后,选择 插入> 模块 .

  • 之后,输入以下代码。
 Sub overdue_days() Dim cell As Integer Dim J As Integer Dim due_date As Date due_date = #1/11/2022# For cell = 5 To 11 If Cells(cell, 4).Value = due_date Then Cells(cell, 5).Value = "Submitted Today" ElseIf Cells(cell, 4).Value> due_date Then J = due_date - Cells(cell, 4).Value J = Abs(J) Cells(cell, 5) .Value = J & " Overdue Days" Else Cells(cell, 5) .Value = "No Overdue" End If Next cell结束子程序 

我们用 ABS功能 来删除减号。

  • 然后,保存该文件。
  • 之后,按 Alt+F8 在你的键盘上点击 "Macro",以打开Macro对话框。
  • 接下来,选择
  • 然后,点击 运行 .

正如你所看到的,我们已经成功地在VBA中使用了日期,并找到了逾期的天数。

类似读物

  • 如何在Excel中使用VBA空间函数(3个例子)
  • 在Excel中使用VBA ChDir函数(4个合适的例子)
  • 如何在Excel VBA中使用IsNull函数(5个例子)
  • 在Excel中使用VBA的Wend语句(4个例子)
  • 如何在Excel的VBA中调用一个子程序(4个例子)

2.使用VBA从日期中查找出生年份

现在,你可以找到从某个特定日期开始的年份。 这是很简单的寻找。

看一下下面的数据集。

在这里,你可以看到一些人的出生日期。 我们的目标是从日期中提取出生年月,同时也提取最后一个条目伊丽莎白的出生年月。

📌 阶梯

  • 首先,按 Alt+F11 在你的键盘上按一下,打开VBA编辑器。
  • 然后,选择 插入>模块 .

  • 之后,输入以下代码。
 Sub find_year() Dim last_entry As Date Dim cell As Integer For cell = 5 To 11 Cells(cell, 4).Value = Year(Cells(cell, 3).Value) If cell = 11 Then last_entry = Cells(cell, 3).Value End If Next cell MsgBox "Birth Year of last entry: " & Year(last_entry) End Sub 
  • 然后,保存该文件。
  • 之后,按 Alt+F8 在你的键盘上点击 "Macro",打开Macro对话框。
  • 接下来,选择 查找年份 .
  • 然后,点击 运行 .

最后,你可以看到我们成功地从每个日期中提取了出生年月。 同时,我们利用Excel中VBA的日期找到了最后一个条目的出生年月。

3.使用VBA在日期中添加天数

现在,你可以定义日期变量并使用它来添加日期。 为了执行这个,我们使用 添补日期 你可以用这个函数在一个特定的日期上增加日、月和年。

看一下下面的数据集。

在这里,你可以看到一些名字和与之相连的一些日期。 现在,我们的目标是在这些给定的日期上再增加五天,并生成一个新的日期。

📌 阶梯

  • 首先,按 Alt+F11 在你的键盘上按一下,打开VBA编辑器。
  • 然后,选择 插入>模块 .

  • 之后,输入以下代码。
 Sub add_days() Dim first_date As Date Dim second_date As Date Dim cell As Integer For cell = 5 To 11 first_date = Cells(cell, 3).Value second_date = DateAdd("d", 5, first_date) Cells(cell, 4).Value = second_date Next cell End Sub 

在这里,我们用 "d "作为DateAdd函数的参数,你可以把它改成 "y "或 "m "来分别添加年或月。

  • 然后,保存该文件。
  • 之后,按 Alt+F8 在你的键盘上点击 "Macro",以打开Macro对话框。
  • 接下来,选择。
  • 然后,点击 运行 .

正如你所看到的,我们已经成功地使用VBA中的日期将天数添加到一个日期中。 现在,你可以根据你的选择来修改代码。

💬 需要记住的事情

VBA日期函数的实际工作原理是 TODAY函数 在Excel中。

VBA日期是excel中的一个非易失性函数。 这意味着即使电源中断,它也会保留数据。

基本上,VBA在执行时将日期值保存为DATE。

因此,如果你试图将一个日期变量赋值为字符串/文本,将会导致错误。

日期的默认值是0001年1月1日的0:00:00(午夜)。

总结

最后,我希望本教程为你提供了关于VBA代码中的日期的有用知识。 我们建议你学习并将所有这些说明应用到你的数据集中。 下载练习工作簿并自己尝试这些。 此外,请随时在评论区提供反馈。 你的宝贵反馈使我们有动力创造这样的教程。

不要忘记查看我们的网站 独家专访 遇到各种与Excel有关的问题和解决方案。

不断学习新方法,不断成长!

Hugh West is a highly experienced Excel trainer and analyst with over 10 years of experience in the industry. He holds a Bachelor's degree in Accounting and Finance and a Master's degree in Business Administration. Hugh has a passion for teaching and has developed a unique teaching approach that is easy to follow and understand. His expert knowledge of Excel has helped thousands of students and professionals worldwide improve their skills and excel in their careers. Through his blog, Hugh shares his knowledge with the world, offering free Excel tutorials and online training to help individuals and businesses reach their full potential.