[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『法定休日の判定』(お米)
勤怠情報を入力する出勤簿を作成しています。
法定休日の判定を自動でしたいのですが、どういった式orマクロを組めば良いでしょうか?
当社の規定は
日曜日〜土曜日を1週間とするシフト制
1週間のうちに休日が複数ある場合は休日出勤していない日を法定休日とし、
全て休日出勤している場合は最初の休日を法定休日として0.35割増して計算します。
シフト制なので決まった曜日ではない、休日出勤したかどうかで法定休日が変わる、の条件という複雑な規程なのでいい案が浮かびません。
現在作っている形式は
A列 B列 C列 D列 E列
日付 曜日 シフト 出勤時間 残業時間
(シフトには早遅休)
略式ですがこんな感じです。
希望はC列の隣に作業列として「法休」と出れば良いなと思います。
よろしくお願いします。
< 使用 Excel:Excel2019、使用 OS:Windows10 >
(わからん) 2023/07/29(土) 12:01:56
A列 B列 C列 D列 E列
1行 日付 曜日 シフト 出勤時間 残業時間
2行 1 日 遅 8:00 1:30
3行 2 月 早 8:00 0:00
4行 3 火 休 0:00 3:00 ←シフトが「休」で残業(休日出勤)をしている
5行 4 水 遅 8:00 0:00
6行 5 木 早 8:00 0:00
7行 6 金 遅 8:00 0:00
8行 7 土 休 0:00 0:00
9行 8 日 遅 8:00 0:00
上記の場合は
A列 B列 C列 D列 E列 F列
1行 日付 曜日 シフト 判定 出勤時間 残業時間
2行 1 日 遅 8:00 1:30
3行 2 月 早 8:00 0:00
4行 3 火 休 0:00 3:00
5行 4 水 遅 8:00 0:00
6行 5 木 早 8:00 0:00
7行 6 金 遅 8:00 0:00
8行 7 土 休 法定 0:00 0:00
9行 8 日 遅 8:00 0:00
D8に法定と出るようにしたいです。
(日〜土曜日の間に休日出勤の無い休日)
また、
A列 B列 C列 D列 E列
1行 日付 曜日 シフト 出勤時間 残業時間
2行 1 日 遅 8:00 1:30
3行 2 月 早 8:00 0:00
4行 3 火 休 0:00 3:00←シフトが「休」で残業(休日出勤)をしている
5行 4 水 遅 8:00 0:00
6行 5 木 早 8:00 0:00
7行 6 金 遅 8:00 0:00
8行 7 土 休 0:00 4:00←シフトが「休」で残業(休日出勤)をしている
9行 8 日 遅 8:00 0:00
上記の場合は
A列 B列 C列 D列 E列 F列
1行 日付 曜日 シフト 判定 出勤時間 残業時間
2行 1 日 遅 8:00 1:30
3行 2 月 早 8:00 0:00
4行 3 火 休 法定 0:00 3:00
5行 4 水 遅 8:00 0:00
6行 5 木 早 8:00 0:00
7行 6 金 遅 8:00 0:00
8行 7 土 休 0:00 4:00
9行 8 日 遅 8:00 0:00
D4に法定と出るようにしたいです。
(日〜土曜日の間の休日どちらも休日出勤している為早い方)
わかりにくくて申し訳ございません。
よろしくお願いします。
(お米) 2023/07/29(土) 12:53:40
この様な場での質問は初めてで何かと不備があり申し訳ございません。
(お米) 2023/07/29(土) 15:25:13
出勤時間が勤務時間だとして、
>8行 7 土 休 0:00 4:00
勤務時間が「0:00」なのに、残業時間が「4:00」なんてことがあるんですか?
一体、休日出勤とは何を基に判断するんですか? (残業しなければ、休日出勤とは言わないのですか?)
(半平太) 2023/07/29(土) 16:08:21
本当に色々割愛していて申し訳ないのですが、当社24時間オンコールがありまして1日に何度も出勤することがあります。
休日に4回出勤した社員もおりますので、職員が分かりやすいように所定労働以外は全て残業時間に入れる様に分けております。
(集計の際はSUMIFで残業と休日出勤を分けて集計しているのでこれは問題ございません。)
情報が多すぎると逆に混乱させてしまうかと思い割愛したことが裏目に出ました。
申し訳ございません。
(お米) 2023/07/29(土) 16:22:57
>会社の規定が >「土〜日曜日の1週間のうちに休日が複数ある場合は休日出勤していない日を法定休日とし、 >全て休日出勤している場合は出勤した最初の休日を法定休日として0.35割増して計算する。」
あれー? 「日〜土曜日」ですよね? まぁ、土から日では2日間しかないから明らかだろうとは思いますけども)
カレンダーはいつも日曜から始まっていますね(=2行目は必ず日曜であり、7行でワンサイクルになっている)
休日が複数ある場合は、休日出勤していない日が法定休日と言うことですが、 どれか1日(一番早い日)だけですね? (休日出勤していない日全てを法定休日にする訳じゃないですね。念の為、確認)
(半平太) 2023/07/29(土) 18:41:05
上の解釈が正しい場合
1.出勤簿シートの「シート見出し」を右クリックして 「コードの表示(V)」を選ぶと 画面中央に白いエリアが出ます。
2.その白いエリアに下のマクロコードを貼り付ける。
3.その後、ALT+F11を押下してエクセルに戻る
4.実行するには 「作業列」と項目名が書いてあるセルを右クリックする。(例では、D1セルを右クリックする)
※なお、コード冒頭の以下の部分は、そちらの実際の表に合わせて、列番号を修正してください。 >Enum ColPos’項目の列番号 > シフト = 3 > 作業列 = 4 > 勤務時間 = 5 > 残業時間 = 6 >End Enum
’シートモジュールに貼り付けるマクロ ’ ↓ Enum ColPos シフト = 3 '列目 作業列 = 4 勤務時間 = 5 残業時間 = 6 End Enum
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Dim App As Application Dim Scope As Range, r As Range Dim i As Long, k As Long, firstCounter As Long, Processed As Boolean
If Target.Address <> Cells(1, 作業列).Address Then Exit Sub Else Cancel = True End If
Set App = Application Set Scope = Range("A2", Cells(Rows.Count, 残業時間).End(xlUp)) Scope.Columns(作業列) = ""
For k = 1 To Scope.Rows.Count Step 7 Set r = Scope.Rows(k).Resize(7)
Processed = False firstCounter = 0
Select Case App.CountIf(r.Columns(シフト), "休") Case 0 '休が無ければスルー Exit Sub
Case 1 '即確定 r.Cells(App.Match("休", r.Columns(シフト), 0), 作業列) = "法休"
Case Else For i = 1 To 7 If r.Cells(i, シフト).Value = "休" Then firstCounter = IIf(firstCounter = 0, i, firstCounter)
If r.Cells(i, 残業時間) = 0 Then r.Cells(i, 作業列) = "法休" Processed = True Exit For End If End If Next i
If Processed = False Then r.Cells(firstCounter, 作業列) = "法休" End If End Select Next k End Sub
(半平太) 2023/07/29(土) 19:00:03
>>会社の規定が
>>「土〜日曜日の1週間のうちに休日が複数ある場合は休日出勤していない日を法定休日とし、
>>全て休日出勤している場合は出勤した最初の休日を法定休日として0.35割増して計算する。」
>あれー? 「日〜土曜日」ですよね?
>まぁ、土から日では2日間しかないから明らかだろうとは思いますけども)
その通りです。失礼しました。
>カレンダーはいつも日曜から始まっていますね(=2行目は必ず日曜であり、7行でワンサイクルになっている)
2行目は必ずしも日曜日ではありません。
TEXT(DATE(年,月,A列(日付)),"aaa")を入れて曜日が自動で変わるようにしてあります。
>休日が複数ある場合は、休日出勤していない日が法定休日と言うことですが、
>どれか1日(一番早い日)だけですね?
>(休日出勤していない日全てを法定休日にする訳じゃないですね。念の為、確認)
その通りです。
日付を基準に曜日をずらしていましたが、曜日を基準に日付をずらしてコードを利用できるようにしてみます。
(お米) 2023/07/31(月) 09:01:01
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.