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


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

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

步骤1

为了理解使用示例的过程,请考虑以下工作表。请注意,提供的工作表仅包含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日。

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

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

步骤3

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

步骤4

转到下面显示的“数字”选项,单击下拉箭头,然后选择“日期”选项。请参考下图:

步骤5

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

示例2:使用VBA代码

步骤1

在这个示例中,我们将使用与上述示例相同的Excel工作表。

步骤2

在本例中,用户将了解生成和执行VBA代码的过程,要执行VBA代码,用户需要打开VBA代码编辑器。为此,请转到“开发工具”选项卡,在“代码”部分下,选择“Visual Basic”选项。请参考以下截图:

步骤3

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

步骤4

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

步骤5

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

' define function header
Function LastBusinessDayOfPrevMonth() As Date
    ' declaring required variables
    Dim lDy As Integer
    Dim prMnth As Integer
    Dim p_year As Integer
    Dim lastBusinessDay As Date
    ' calling day() method, with required data values
    lDy = Day(DateSerial(Year(Date), Month(Date), 0)) ' Get the last day of the current month
    prMnth = Month(Date) - 1 ' Get the previous month
    p_year = Year(Date) ' Get the year of the previous month
    ' if block to check value
    If prMnth = 0 Then ' If the previous month is December, adjust the year and month accordingly
        ' processing step for execution of if block
        prMnth = 12
        p_year = Year(Date) - 1
    ' end of if block
    End If
    ' calling last business day
    lst_BnsDay = DateSerial(p_year, prMnth, lDy) ' Combine the previous year, previous month and last day of the current month
    ' while loop
    While Weekday(lst_BnsDay, vbMonday) = 6 Or Weekday(lst_BnsDay, vbMonday) = 7 ' Check if the last day of previous month is a weekend day
        ' processing step
        lst_BnsDay = DateAdd("d", -1, lst_BnsDay) ' If the last day is a weekend day, move it back by one day until a weekday is reached
    Wend
    
    LastBusinessDayOfPrevMonth = lst_BnsDay ' Return the last business day of previous month
' end of function definition
End Function 

步骤6

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

步骤7

按“Enter”键以日期格式显示所需的结果。请参见以下最终输出截图:

结论

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

更新于:2023年5月22日

浏览量:1K+

开启您的职业生涯

完成课程获得认证

开始学习
广告