この記事では、土曜日と日曜日を週休みとして含む、または除外する、指定された日付間の稼働日数をカウントするユーザー定義関数(UDF)を作成します。

この例の生データは、開始日と終了日で構成されています。これらの日付の間の稼働日数をカウントしたいと思います。

ArrowMain

「休日」シートの列Aに休日の日付を指定しました。

ArrowHolidayList

Excelには、間隔間の稼働日数をカウントする関数NETWORKDAYSが組み込まれています。

NETWORKDAYS関数の構文NETWORKDAYS(StartDate、EndDate、[Holidays])

この関数は、稼働日数をカウントしながら、休日リストで指定された日付を除外します。

この関数は、デフォルトで土曜日と日曜日を週休みと見なすため、週休みが1週間しかない場合、稼働日数をカウントすることはできません。

間隔間の稼働日数をカウントする「CountWorkingDays」カスタム関数を作成しました。このカスタム関数は、NETWORKDAYS関数の問題を処理します。この関数では、土曜日または日曜日のいずれかに1週間の休暇しかない場合でも、稼働日数をカウントできます。

カスタム関数の構文

CountWorkingDays(StartDate、EndDate、InclSaturdays、InclSundays)

InclSaturdaysおよびInclSundaysはオプションのパラメーターです。デフォルトでは、両方ともTRUE値を持っています。土曜日と日曜日を営業日に変更するには、それぞれのパラメーターの値をFALSEに変更します。

MicrosoftはExcel2010でNETWORKDAYS.INTL関数を導入しました。この関数はNETWORKDAYS関数の問題を処理します。この関数では、休日の曜日を指定できます。週休みとして1日または2日を指定できます。

NETWORKDAYS.INTL関数の構文

NETWORKDAYS.INTL(StartDate、EndDate、[Weekend]、[Holidays])

週末パラメーターでは、休日を指定できます。

この例では、上記の3つの関数すべてを使用して、稼働日数をカウントします。

ArrowOutput

ロジックの説明

「CountWorkingDays」関数では、最初に、パラメーターで指定された日付が指定された休日リストに存在するかどうかを確認します。日付が休日リストに存在する場合、その日は稼働日数にカウントされません。日付が休日リストに存在しない場合は、指定された日付が土曜日か日曜日かを確認してください。提供された入力パラメーターに基づいて、土曜日または日曜日を休日として含めるか除外するかを確認します。

コードの説明

RngFind = Worksheets( “Holidays”)。Columns(1).Find(i)を設定します

上記のコードは、指定された日付が休日リストに存在する場所を見つけるために使用されます。

RngFindがない場合は、GoTo ForLast End上記のコードを使用して、指定した日付が休日リストに存在するかどうかを確認します。条件がTRUEを返す場合、その日は稼働日数にカウントされません。

コードについては以下に従ってください

Option Explicit

Function CountWorkingDays(StartDate As Long, EndDate As Long, Optional InclSaturdays As Boolean = True, _

Optional InclSundays As Boolean = True)

'Declaring variables

Dim RngFind As Range

Dim i As Long

For i = StartDate To EndDate



On Error Resume Next



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

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



On Error GoTo 0



'Checking whether it is holiday on the given date

If Not RngFind Is Nothing Then

GoTo ForLast

End If



'Checking whether it is Saturday on given date

If InclSaturdays Then

If Weekday(i, 2) = 6 Then

GoTo ForLast

End If

End If



'Checking whether it is Sunday on given date

If InclSundays Then

If Weekday(i, 2) = 7 Then

GoTo ForLast

End If

End If



CountWorkingDays = CountWorkingDays + 1



ForLast:

Next

End Function

このブログが気に入ったら、FacebookやFacebookで友達と共有してください。

皆様からのご意見をお待ちしております。私たちの仕事を改善し、あなたのために改善する方法をお知らせください。 [email protected]までご連絡ください