2023/04/28 23:33 更新
トップページに移動| 前のページに移動次のページへ |ダウンロード(shift-solver17.zip)
17.入力チェック
   

予約勤務と連続不可勤務との重複

予約勤務と連続不可勤務との相互重複チェックを行います。
重複した場合は、予約表内の行全体を薄いピンクで着色。

下図の例では、K19で、岸信介さんが、前順末から「早遅」と連続して「連続不可勤務」の1番目の条件と重複。

数式の説明

MyReplaceAll関数は、範囲内のセルの文字を変換テーブルに従い置換
myconnectall関数は、範囲内のセルの文字をすべて連結、ただし、空白セルは半角スペース" "とする。
IF関数で判定しているのは、「前旬使用」がオンの場合は、前旬列データを含めて連結するため。
(オフの場合は、今旬データのみ)

=MyReplaceAll(IF(前旬使用,myconnectall(D20:J20,, "―"),"")&myconnectall(K20:Q20,," "),勤務変換表)
{=COUNT(IF($Y$12:$Y$16="","",IFERROR(FIND($Y$12:$Y$16,R20),"")))}


「予約表」内の条件付き書式

予約勤務と不可勤務との重複

予約勤務と不可勤務との重複
同じ勤務を予約と不可に設定はできないので、重複した場合はで塗り潰すようにします。

条件付き書式
予約で設定されたデータを、同じ位置の不可勤務から探し、見つかった場合に塗り潰します。
不可勤務では複数の勤務を指定できるので、カンマ区切りのデータとしてSEARCH関数で探します。

不可勤務のデータの前後に「,」を付加、予約のデータの前後にも「,」を付加することにより、
「,日,」のようにカンマで挟まれたデータを探すことができます。

不可、予約の両表に設定

不可勤務表



=AND(K12<>"",ISERROR(SEARCH("*," & K12 & ",*",","&K19&","))=FALSE)
  予約勤務表



=AND(K19<>"",ISERROR(SEARCH("*," & K12 & ",*",","&K19&","))=FALSE)

勤務色の自動反映

勤務名の背景色、文字色をシフト表に自動で反映します。
入力部の勤務名のセルで背景色、または文字色を設定しておくと、作成後のシフト表に反映されます。

色を変更後、すぐにシフト表に反映したい場合は「勤務色更新」ボタンをクリックします。
(配色を確認したい場合など)

ソースコード - 勤務色設定部

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
'------------------------------------------
' サブルーチン
'------------------------------------------
 
Private Sub SetKinmuCellColor(範囲 As Range)
'
' 指定範囲を勤務に応じたセル色にセット
'
    Application.ScreenUpdating = False  '画面更新停止
    Dim tmp As Range
    For Each tmp In 範囲
        tmp.Interior.Color = KinmuColor(tmp.Value)
        tmp.Font.Color = KinmuFontColor(tmp.Value)
    Next
    Application.ScreenUpdating = True  '画面更新再開
End Sub
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
'-------------------------------------------
' 勤務名変換関数
'-------------------------------------------
 
Function Kinmu(No As Integer) As String
'
' 番号を勤務名に変換
'
    Kinmu = ""
    With Range("勤務リスト")
        If No >= 1 And No <= .Rows.Count Then
            Kinmu = .Cells(No)
        End If
    End With
     
End Function
 
Function KinmuNo(Kinmu As String) As Integer ' 勤務名を番号に変換
    KinmuNo = GetKinmu(Kinmu, "勤務番号")
End Function
 
Function KinmuColor(Kinmu As String) As Long ' 勤務名を背景色に変換
    KinmuColor = GetKinmu(Kinmu, "背景色")
End Function
 
Function KinmuFontColor(Kinmu As String) As Long ' 勤務名を文字色に変換
    KinmuFontColor = GetKinmu(Kinmu, "文字色")
End Function
 
Function GetKinmu(Kinmu As String, 取得種別 As String) As Long
'
' 勤務名に応じた情報取得
'
    GetKinmu = -1
    With Range("勤務リスト")
         
        Dim As Integer
        For i = 1 To .Rows.Count
            If Strings.Trim(Kinmu) = .Cells(i, 1) Then
                Select Case 取得種別
                    Case "勤務番号": GetKinmu = i
                    Case "背景色":   GetKinmu = .Cells(i, 1).Interior.Color
                    Case "文字色":   GetKinmu = .Cells(i, 1).Font.Color
                    Case Else
                End Select
            End If
        Next i
         
    End With
     
End Function

以下のタイミングで呼び出される

・「勤務色更新」ボタンクリック
・「初期化」ボタンクリック
・シフト表作成後の最終処理部



トップページに移動| 前のページに移動次のページへ |ダウンロード(shift-solver17.zip)

関連

×
ページ先頭 ☆:DL File
 シフト表自動作成トップ ☆
 1.単一勤務種別の自動割当
 2.複数勤務種別
 3.連続勤務不可条件
 4.不可条件
 5.均等化-ソルバー
 6.均等化-均等再配置アドイン
 7.不可勤務を複数指定
 8.勤務指定方法の改良
 9.自動化
10.不可勤務入力改良
11.人数の可変化・全自動実行
12.予約勤務
14.連続休み日数の制限
15.連続勤務日数の制限
16.前旬データを考慮
17.入力チェック
18.実行速度改良&汎用化
19.過去勤務状況を反映
20.2週間7人制拡張版
21.予定勤務日数
22.手動調整