Microsoft ExcelでVBAを使用して2つの日付の間の平日の数を計算し
この記事では、土曜日と日曜日を週休みとして含む、または除外する、指定された日付間の稼働日数をカウントするユーザー定義関数(UDF)を作成します。
この例の生データは、開始日と終了日で構成されています。これらの日付の間の稼働日数をカウントしたいと思います。
「休日」シートの列Aに休日の日付を指定しました。
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つの関数すべてを使用して、稼働日数をカウントします。
ロジックの説明
「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]までご連絡ください