如何在 Excel 中根据今天获取上个月的最后一个工作日?

ms excelmicrosoft technologiescomputers更新于 2024/7/20 9:16:17

本文将帮助用户了解如何在 Excel 中生成上个月的最后一个工作日。第一个示例将指导用户如何使用公式,第二个示例则使用 VBA 代码执行相同的任务。例如,如果今天是 2023 年 5 月 6 日,那么 2023 年 4 月 29 日将是上个月的最后一个工作日(假设周末和节假日不被视为工作日)。

示例 1:使用用户自定义公式:

步骤 1:

要了解如何使用示例,请参考以下工作表。请注意,提供的 Excel 工作表仅在 E2 单元格中包含列标题,E3 单元格中有一个空格。

步骤 2:

转到 E3 单元格并输入公式"=WORKDAY(DATE(YEAR(TODAY()),MONTH(TODAY()),1),-1)"。

上述公式的说明:

  • TODAY() 方法将以 Excel 日期格式返回当前日期。

  • YEAR(TODAY()) 方法将返回当前日期的年份部分。

  • MONTH(TODAY()) 方法将根据当前日期返回月份。

  • DATE(YEAR(TODAY()), MONTH(TODAY()),1) 方法将通过组合当前日期的年份和月份,并将日期设置为该月的第一天来创建一个新日期。例如,如果当前日期是 2023 年 5 月 6 日,则此函数将返回 2023 年 5 月 1 日。

  • 从 DATE 函数返回的日期中减去 -1,将日期向后移动一天。

  • WORKDAY() 方法将计算上述步骤获得的日期之前的最后一个工作日。 WORKDAY 函数会考虑所有节假日或周末,这些节假日或周末由可选参数指定。

步骤 3:

上述公式将显示以下生成的结果。要将生成的数字转换为有效日期,用户需要将相应的公式从数字类型更改为日期类型。

步骤 4:

转到下面显示的"数字"选项,点击下拉箭头,然后选择"日期"选项。请参考下图以获得正确的参考 -

步骤 5:

上述更改会将数字转换为日期数据类型。请参考以下图片:

示例 2:使用 VBA 代码:

步骤 1:

在此示例中,我们将使用与上例相同的 Excel 工作表:

步骤 2:

在此示例中,用户将了解生成和执行 VBA 代码的过程,并且要执行 VBA 代码,用户需要打开 VBA 代码编辑器。为此,请转到"开发人员"选项卡,然后在"代码"部分下,选择"Visual Basic"选项。请参考以下快照:

步骤 3:

上述步骤将打开一个"Microsoft Visual Basic for Applications"对话框,如下所示:

步骤 4:

在出现的对话框中,点击"插入"选项卡,然后选择"模块"选项。

步骤 5:

上述步骤将打开一个空的代码编辑器。在打开的空白区域中,输入以下代码 -

' 定义函数头
Function LastBusinessDayOfPrevMonth() As Date
    ' 声明所需变量
    Dim lDy As Integer
    Dim prMnth As Integer
    Dim p_year As Integer
    Dim lastBusinessDay As Date
    ' 调用 day() 方法,并传入所需数据值
    lDy = Day(DateSerial(Year(Date), Month(Date), 0)) ' 获取当前月份的最后一天
    prMnth = Month(Date) - 1 ' 获取上个月
    p_year = Year(Date) ' 获取上个月的年份
    ' 检查值的 if 语句块
    If prMnth = 0 Then ' 如果上个月是十二月,则相应调整年份和月份
        ' if 块执行的处理步骤
        prMnth = 12
        p_year = Year(Date) - 1
    ' if 语句块结束
    End If
    ' 调用最后一个工作日
    lst_BnsDay = DateSerial(p_year, prMnth, lDy) ' 合并上一年、上一月和当前月的最后一天
    ' while 循环
    While Weekday(lst_BnsDay, vbMonday) = 6 Or Weekday(lst_BnsDay, vbMonday) = 7 ' 检查上个月的最后一天是否为周末
    ' 处理步骤
    lst_BnsDay = DateAdd("d", -1, lst_BnsDay) ' 如果最后一天是周末,则将其向后移动一天,直到到达工作日
    Wend
    
    LastBusinessDayOfPrevMonth = lst_BnsDay ' 返回上个月的最后一个工作日
' 函数定义结束
End Function 

步骤 6:

之后,使用组合键 "Alt + Q" 退出工作表,并调用方法 "=LastBusinessDayOfPrevMonth()",如下所示 -

步骤 7:

按 "Enter" 键以日期格式显示所需结果。请参阅下方附件中的最终输出快照 -

结论

借助本文,用户可以根据今天的日期获取最后一个工作日/营业日。本文演示了两个示例。第一个公式使用用户自定义公式来检索上个月的最后一个营业日;第二个示例中,使用 VBA 编写程序代码来生成相同的结果。


相关文章


有用资源