在本文中,我们将创建一个用户定义函数(UDF),以检查它是否在指定的日期放假,包括将周六和周日作为休息时间,或将周六和周日除外。

该样本的原始数据按顺序在A列中包含日期。我们将发现给定日期是否是假日,包括或不包括周六或周日的休息日。

ArrowRawData

我们在“假期”表的A列中指定了假期日期。

ArrowHolidayList

我们创建了“ IsHoliday”自定义函数,以查找给定日期的假期状态。

函数的语法

IsHoliday(日期,包括星期六,包括星期日)

InclSaturdays和InclSundays是可选参数。默认情况下,两者都为TRUE值。要将星期六和星期日更改为工作日,请将相应参数的值更改为FALSE。

ArrowOutput

我们在单元格C9中使用以下公式在单元格A9中查找日期的休假状态,将星期六视为工作日。

IsHoliday(A9,FALSE)

我们在D9单元格中使用以下公式在A9单元格中查找日期的休假状态,并将周六和周日视为工作日。

IsHoliday(A9,FALSE,FALSE)

我们使用E9单元格中的以下公式在A9单元格中查找日期的休假状态,并将周六和周日视为休假时间。

IsHoliday(A9)

逻辑解释

在“ IsHoliday”功能中,首先我们检查参数中给定的日期是否在指定的假日列表中。如果假日列表中存在日期,则返回“假日”作为输出。如果假日列表中没有日期,请检查指定的日期是星期六还是星期日。根据提供的输入参数,检查是否将星期六或星期日作为假期。

代码说明

设置RngFind = Worksheets(“假日”).Columns(1).Find(LngDate)

上面的代码用于查找假日列表中指定日期的位置。

如果没有,则OK =“ Holiday”

如果上述代码,则转到最后一个结束代码,用于检查假日列表中是否存在指定的日期。如果条件返回TRUE,则自定义函数将返回“假日”作为输出,并且控件移至UDF的最后一行。

请遵循以下代码

Option Explicit

Function IsHoliday(LngDate As Date, Optional InclSaturdays As Boolean = True, _

Optional InclSundays As Boolean = True)

'Declaring variables

Dim RngFind As Range

Dim OK As String

'Initializing the variable

OK = "Working day"

On Error Resume Next

'Finding the location where the specified date exist in the Holidays sheet

Set RngFind = Worksheets("Holidays").Columns(1).Find(LngDate)

On Error GoTo 0

'Checking whether it is holiday on the given date

If Not RngFind Is Nothing Then

OK = "Holiday"

GoTo Last

End If

'Checking whether it is Saturday on given date

If InclSaturdays Then

If Weekday(LngDate, 2) = 6 Then

OK = "Holiday"

GoTo Last

End If

End If

'Checking whether it is Sunday on given date

If InclSundays Then

If Weekday(LngDate, 2) = 7 Then

OK = "Holiday"

End If

End If

Last:

IsHoliday = OK

End Function

如果您喜欢此博客,请在Facebook和Facebook上与您的朋友分享。

我们很希望收到您的来信,请让我们知道我们如何才能改善我们的工作并使您的工作更好。写信给我们[email protected]