如何在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+

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.