ページ移動:JavaScriptを有効にして下さい!
22.手動調整

作成したシフト表を、手動で調整するための仕組みを考えます。

手動調整の仕様

「出力」表をダブルクリックで入力用のフォームを開く

入力用フォームでOKを押すと、「変化するセル」のセル値が変更される。

その他の改良

エラー状況を一か所でわかるようにする。

シートの保護機能


エラー状況の表示

下図は、羽田孜氏:4日に「遅」を設定した場合。
不可勤務と重複し、確保でエラー(余分)、および日数調整に一致しない旨のエラーが赤字(条件付き書式)で表示されている。




手動調整

出力部の「勤務シフト」表をダブルクリックすると入力フォームを表示。

フォームでは勤務略称のリストが表示され(下図、不可勤務と、出力部の勤務シフト表
選択して「OK」を押すと変更を反映。
 (消去する場合は、リスト一番下の空白を選択して「OK」をクリック)


下図の「勤務シフト表」表は直接は変更できない。(出力部の「勤務シフト表」入力フィールででは無く、計算式が設定されている。)
そこで、「変化させるセル」の方を変更し、間接的に「出力」表が変更されるようにする。




入力フォームの表示と解除

以下の項目を実現するために、少々の工夫をします。

・対象内のセルをダブルクリックされたら入力フォームを開き、セル値をリストに反映。
・対象外のセルを選択されたら入力フォームを閉じる。
・対象内で別のセルを選択した場合は、その内容を入力フォームに反映させる。


以下、コード

メイン部 シート


シートの保護機能

誤って計算式が設定されているセルに入力しないように、シートを保護する。

ただし、シートが保護されている状態ではソルバーが機能しない(ような)ので、
通常状態では「シート保護」、ソルバー実行時には「シート保護の解除」、終了後に再度「シート保護」をして処理を終える。

ただし、以下の項目は保護対象外とする
Public Sub SheetProtect()   'シート保護
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True
End Sub
Public Sub SheetUnprotect()     '保護解除
    ActiveSheet.Unprotect
End Sub

ソルバー処理開始前と後に、SheetUnprotect , SheetProtect を呼び出す。(下記の太字/斜体部)
Private Sub cmd日数調整条件_Click()、Private Sub cmd日数調整条件_Click()、Public Sub cmdGo_Click() も同様

Private Sub cmd確保条件_Click()
    With ActiveSheet
        Call SheetUnprotect   'シート保護解除
        .Range("MSG") = ""
        .条件設定_確保
        SolverOptions , , , , , , , , , , , , , , , , , , , , TIME_NO_IMP_MAX
        SolverOkDialog SetCell:="目標_過不足", MaxMinVal:=2, ValueOf:=0, ByChange:="変化させるセル", Engine:=3, EngineDesc:="Evolutionary"
        If .Range("目標_過不足") = 0 Then .Range("MSG") = "確保成功"
        .cmd勤務色更新_Click
        Call SheetProtect   'シート保護
    End With
End Sub
手動での保護解除

下図、「校閲」タブの「シート保護の解除」をクリックします。(保護したい場合は、再度、同ボタンをクリック)



関連

ソルバーを使用した魔方陣の作成 - 3x3,4x4
ソルバーによるシフトパターンの自動配置 - 人件費を最小に抑える従業員の勤務スケジュール
ページ移動:JavaScriptを有効にして下さい!

関連

×
PageTop