查找当月的第一个工作日

时间:2015-05-31 09:01:56

标签: excel vba excel-vba

我正在处理代码,该代码确定今天当月的第一个工作日。如果这是True,则运行一段代码。我的代码是:

If Date = LastDay - Day(LastDay) + 1 then

' My code is run Here


End if 

问题:,它似乎指的是本月的最后一天,即5月29日。

4 个答案:

答案 0 :(得分:0)

此功能将返回给定月份和年份的第一个星期一的日期:

Function fwday(Optional givenDate As Variant) As Date
    ' returns the date of the first Monday in a given month and year
    ' if called without argument the current date is used
    Dim d As Date

    If IsMissing(givenDate) Then givenDate = Date

    d = DateSerial(Year(givenDate), Month(givenDate), 1)
    d = d + ((9 - (d Mod 7)) Mod 7)
    fwday = d
End Function

答案 1 :(得分:0)

这是另一种方法,还包括在假期中添加的可能性:

Function IsFirstWorkday(DT As Date, ParamArray Holidays() As Variant) As Boolean
    IsFirstWorkday = (WorksheetFunction.WorkDay(DT - Day(DT), 1, IIf(UBound(Holidays) = -1, 0, Holidays)) = DT)
End Function

假日列表可以作为数组或字符串传递。

例如,圣诞节和新年假期:

Sub foo()
    If IsFirstWorkday(Date, #1/1/2016#, #12/25/2015#) Then
        MsgBox "First Workday"
    Else
        MsgBox "Not First Workday"
    End If
End Sub

如果您使用的是更新版本的Excel(我相信2010或更高版本),则此功能的一个版本允许您指定适用于您的语言环境的特定周末天数。

答案 2 :(得分:0)

这是一个更简单的解决方案,可以找到当月的第一个工作日,如果需要,您可以指定要在WORKDAY工作表函数的第3个参数中排除的假日:

Evaluate("Workday(EOMonth(Now(),-1),1)")

它会在上个月的最后一天之后找到第一个工作日,如果指定的话,不包括周末和公众假期。

这适用于2007年之后的Excel版本,否则您需要安装Analysis ToolPak加载项。

答案 3 :(得分:-1)

这是一个简单的方法来获得本月的第一个工作日:

Sub fwday()
   Dim d1 As Date, day1txt As String
   d1 = DateSerial(Year(Date), Month(Date), 1)
   day1txt = Format(d1, "dddd")
   If day1txt = "Saturday" Then d1 = d1 + 2
   If day1txt = "Sunday" Then d1 = d1 + 1
   MsgBox d1
End Sub

您可能需要根据区域设置调整日期拼写。