リストから勤務名として指定できるようにする
改良項目
・勤務を数値ではなく、名称で入力
計算用は数式で自動変換
・日付をプルダウンメニューから選択
作成週を切り替えられるようにする
・範囲名に名前
セルアドレスではなく、
名前で参照する
・ワークシートの改良
色分け表示、セル位置変更
・ユーザー定義関数
数式を補助するために簡単な関数を作成
文字列連結-
MyConnectAll: 指定範囲の全文字列を連結
1週間分の勤務を「&」連結するのは許容範囲としても、2週間以上となるとみっともないので!
全文字置換-
MyReplaceAll: 勤務名を数値に全て置換
置換対象が複数種類ある場合、数式だけでは非常に困難。
その他の数式はほとんど同じなので、説明は省略します。
シミュレーションの実行
下記の手順で実行します。
1.入力部の
黒枠内に必要なデータを入力
日付、必要人数、連続不可勤務は
プルダウンメニューから入力
不可勤務は直接文字入力
→ 後に
チェックボックスで選択できるように改良
2.
ソルバーを実行
既定の入力値でそのまま実行可
目的セル(過不足計)が0に
収束しない場合があります。
その場合は、
再度「初期化」をしてソルバーを実行してください。
(乱数を使っているらしく、毎回、挙動が異なるようです。)
3.「
均等再配置」を実行
既定の入力値でそのまま実行可
以上。
上図が全体図および実行結果
赤枠が、ソルバー用の入力セル範囲
緑枠が、「均等再配置」用の入力セル範囲
青枠が、ソルバーおよび「均等再配置」共通の入力セル範囲
ユーザー定義関数
Function MyConnectAll(範囲 As Range, Optional 区切り文字 As String = "") As String ' ' 範囲内の文字列をすべて連結 ' それぞれの文字の間には区切り文字を連結:省略可 ' Dim tmp MyConnectAll = "" For Each tmp In 範囲 If MyConnectAll <> "" Then MyConnectAll = MyConnectAll & 区切り文字 MyConnectAll = MyConnectAll & tmp Next End Function Function MyReplaceAll(データ, 変換テーブル As Range) As String ' ' 含まれる文字をテーブルをもとにすべて変換 ' Dim k As Integer Dim Tbl Tbl = 変換テーブル MyReplaceAll = データ For k = 1 To UBound(Tbl, 1) MyReplaceAll = Replace(MyReplaceAll, Tbl(k, 1), Tbl(k, 2)) Next k End Function
名前一覧
補足: 指定日を休みにしたい場合
この不可勤務に、全ての勤務を並べて置く ことで、休みを実現することができます。
(全ての勤務が不可 → 勤務が割り当てられない → 休み)
最終的には、予約勤務で「公休」などの休みを予約できるように・・・したい。
次項では、マクロを使用して、なるべく全自動化します。
また、不可勤務の入力を改良(できるかぎり)します。
ページ移動:JavaScriptを有効にして下さい!