TOP

労働時間

説明

この記事では、2 つの日付の間の労働時間を計算する方法を検討します。この情報は、従業員の仕事の効率の分析と、出来高払いシステムの場合に費やされる有効時間の計算の両方に必要になる場合があります。

そこで、労働時間をカウントするのに役立つ独自の関数を作成し、それを WORKHOURS と名付けましょう。

メニューを開く サービス - マクロ - エディター Visual Basic 新しいモジュールを挿入します (メニュー Insert - Module) そして、この関数のテキストをそこにコピーします。

Function WORKHOURS(StartDate As Variant, EndDate As Variant)
    Application.Volatile
    StartDate = StartDate.Address
    EndDate   = EndDate.Address
    
    ' 初日の勤務時間 
    WORKHOURS1 = Evaluate("IF(AND(DAY(" & StartDate & ")=DAY(" & _
    EndDate & "),MONTH(" & StartDate & ")=MONTH(" & EndDate & "))," & EndDate & _
    "-" & StartDate & "-IF(AND(HOUR(" & StartDate & ")<=13,HOUR(" & EndDate & _
    ")>=14),1/24,0),18/24-MOD(" & StartDate & ",1)-IF(HOUR(" & StartDate & _
    ")<=13,1/24,0))")
    
    ' 中間日の労働時間 
    WORKHOURS2 = Evaluate("MAX((IF(AND((WEEKDAY(" & EndDate & ",2))"&"<"&"(WEEKDAY(" & StartDate & _
    ",2)),((WEEKDAY(" & StartDate & ",2))-(WEEKDAY(" & EndDate & ",2)))>1),(((DATEDIF(" & StartDate & _
    "," & EndDate & "," & """D""" & ")+1))-(FLOOR((DATEDIF(" & StartDate & "," & EndDate & _
    "," & """D""" & ")+1)/7,1)*2)-2),(((DATEDIF(" & StartDate & "," & EndDate & "," & """D""" & ")+1))-(FLOOR((DATEDIF(" & _
    StartDate & "," & EndDate & "," & """D""" & ")+1)/7,1)*2)))-2),0)*8/24")
    
    ' 最終日の勤務時間 
    WORKHOURS3 = Evaluate("IF(AND(DAY(" & StartDate & _
    ")=DAY(" & EndDate & "),MONTH(" & StartDate & ")=MONTH(" & EndDate & ")),0,MOD(" & EndDate & _
    ",1)-9/24-IF(HOUR(" & EndDate & ")>=14,1/24,0))")
    
    WORKHOURS = WORKHOURS1 + WORKHOURS2 + WORKHOURS3
End Function

Visual Basic エディタを閉じて、Excel に戻ります。

機能マスター カテゴリ内で ユーザー定義の WORKHOURS 関数を見つけて使用してください。関数の構文 続く:

 =WORKHOURS(開始日; 終了日)