いちばん失敗した人決定戦

tatsu99様 昨日は「VBAシフト表における従業員の固定休のプログラムについて」の件ありがとうございました。
従業員の休みに対応したVBAプログラム、活用させていただいております。
昨日の今日で大変申し訳ないのですが、今回の質問は勤務管理表の休み以外のセルに、設定シートにある従業員の担当業務を勤務管理表シートに割り振りするプログラムについてご教示頂きたく質問致しました。

添付した画像を例に構築したいVBAプログラムをご説明させていただきます。
日にちは14日から一ヶ月とします。
上段の設定シートと下段の勤務管理表シートは同じExcelファイルになります。キャプチャする為に分割致しました。
設定シートの表は各従業員の担当業務になります。
それを勤務管理表の「休」以外のセルに優先1の業務をそれぞれの担当者に出力。
一日の業務には必ず「会議」、「事務」、「営業」を組み込みます。
14日を例としますと「営業」担当のCさんが休みの為、Eさんが「営業」担当になります。
17日は「会議」担当のBさんがお休みの為、Aさんが「会議」担当になります。
この様に「休」のセル以外に、担当常務を割り振るプログラムとその担当者が休みの場合に違う担当者が変わりを勤めるプログラムを作成したい内容になります。
また文字の色の条件を「サポート」は赤、「会議」は緑、「営業」は黄色、「事務」は水色と設定をしたいです。
勤務管理表の休みの関係で担当業務の「会議」、「営業」、「事務」を出力した際に重複があった場合はMsgBoxで「重複があります!」のメッセージを。また背景を赤で表示させたいです。

以上が私が構築したいプログラムの内容になります。

tatsu99様 よろしくお願い致します。

「tatsu99様 VBA勤務管理表の業務」の質問画像

質問者からの補足コメント

  • tatsu99様、設定シートの各従業員担当業務の表の最新キャプチャ画像を添付致しましたのでこれを例にお礼からご説明致します。

    「tatsu99様 VBA勤務管理表の業務」の補足画像1
    No.5の回答に寄せられた補足コメントです。 補足日時:2017/05/15 12:05

A 回答 (18件中11~18件)

追加確認です。


「ヘルプ」に関しては、他の業務ができないので、「ヘルプ」を設けたとのことですので、
ヘルプが定義される場合は、優先1にヘルプを定義し、優先2から優先4は全て空白ということに
したいのですが、いかがでしょうか。
もし、その新人が、サポートとかの他の業務ができるようになれば、ヘルプを削除し、サポート等の業務を記述することになります。
    • good
    • 0
この回答へのお礼

tatsu99様、要件の変更に関して誠に申し訳ございません。
この様なことを繰り返さない様に、以後、気をつけます。

1)提示例でBさん1人体制のとき、割り当ては会議で間違いないですか。
 ・はい、間違いありません。
2)Dさんが優先1=事務、優先2=会議で定義されているなら、
  Dさん1人体制のとき、割り当ては、事務で間違いないですか。
 ・はい、間違いありません。

一人体制、二人体制の時の業務の割り当てに「会議」、「事務」を優先の件ですが、
担当業務がない場合はそのまま入力なし、とする事が可能であれば以下の様にしたいです。
1)提示例でCさん1人体制のとき、何の業務を割り当てるのか?
  Cさん一人体制の場合は「会議」、「事務」の中の優先2の「会議」が出来るので「会議」。
2)提示例でBさんとCさんの2人体制のとき、BさんとCさんは何の業務をわりあてるのか?
  Bさんは「会議」、Cさんは「事務」が出来ないので何も入力無し。
3)提示例でAさんとCさんの2人体制のとき、AさんとCさんは何の業務をわりあてるのか?
  AさんはCさんには出来ない優先3にある「事務」が出来るので「事務」。Cさんは優先2の「会議」。
4)提示例でEさんとCさんの2人体制のとき、EさんとCさんは何の業務をわりあてるのか?
  Eさんはそのまま入力なしの、Cさんは「会議」。
上記の「会議」、「事務」に該当しない場合の処理をそのまま片方、無視するなどの処理は可能でしょうか?

はい、「ヘルプ」は優先1に定義し優先2から4は空白で問題ありません。

tatsu99様何か良い方法はありますでしょうか?

よろしくお願い致します。

お礼日時:2017/05/15 13:52

追加確認です。


1人体制で会議と事務は優先順位はないと考えてよいですか。
1)提示例でBさん1人体制のとき、割り当ては会議で間違いないですか。
2)Dさんが優先1=事務、優先2=会議で定義されているなら、
  Dさん1人体制のとき、割り当ては、事務で間違いないですか。
    • good
    • 0

要件が変わりすぎます。


・「ヘルプ」業務がいきなり出現している。
・1人体制では、会議か事務を割り当てるということだったが「ヘルプ」がある。
・各担当者は、サポート、営業、事務、会議のいずれもできるはずであるが、出来なくなっている。
等があります。
最初に要件を全て提示されることを望みます。今回は、やむなしとしますが、次回からの対応はなしと思ってください。

不明点は以下の通りです。
1人体制、2人体制で、会議、事務を優先とあるが、そのことに関してです。
1)提示例でCさん1人体制のとき、何の業務を割り当てるのか?
2)提示例でBさんとCさんの2人体制のとき、BさんとCさんは何の業務をわりあてるのか?
3)提示例でAさんとCさんの2人体制のとき、AさんとCさんは何の業務をわりあてるのか?
4)提示例でEさんとCさんの2人体制のとき、EさんとCさんは何の業務をわりあてるのか?
    • good
    • 0

確認の追加です。


確認5
専従要員の割り当ては、その専従要員の優先1の業務が必ず割り当てられる。他の業務をすることは一切ない。
但し、1人体制で、営業の専従要員がついたときは、会議か事務の何れかを割り当てる。
従って、専従要員間で業務の持ち回りのようなことはしない。
持ち回りをする場合は、次の月に、設定シートの優先1の業務を変えることにより行う。

確認6
サポート要員を会議、事務、営業の何れかに割り当てる場合は、設定シートの従業員名が上位(行番号の小さいほう)に
あるものから、割り当てを行う。提示された例では、Aさん、Eさん、Fさんがサポート要員なので
A→E→Fの順に割り当てる。
従ってFさんが新人なら、「サポート」を行う確率が最も高くなる。
もし、新人を優先的に会議、事務、営業の何れかに割り当てたいなら、Aさんの位置に新人を持ってくることが必要となる。
尚、サポート要員の割り当て順序は、設定シートの並びで決まり、勤務管理表シートの並びとは関係しない。
(設定シートの要員の並びと勤務管理表シートの並びは一致しなくても良い)
この回答への補足あり
    • good
    • 0
この回答へのお礼

各従業員の担当業務は設定シートの様に担当業務が出来る人、出来ない人がおります。
補足添付画像を例にBさんは「会議」、「事務」は出来るが「営業が」出来ない。
Cさんは「営業」、「会議」は出来るが「事務」が出来ない。
この設定シートを条件に勤務管理表に出力をしたいです。
例えば月曜日は全員出勤なので優先1からそのまま割り当て。
火曜日はBさんがお休みの為「会議」担当にAさん、CさんがおりますがCさんが優先1の「営業」の為Aさん。
水曜日は「営業」担当のCさんがお休みの為優先2からDさんが担当でAさんが「事務」。
木曜日はBさん、Cさんがお休みの為Aさんが「会議」、Dさんが「事務」。
金曜日はFさんが一人なのでそのままヘルプを表示。
マクロが空欄をエラーと認識してしまう為Fさんの業務を「ヘルプ」としました。

「最初に出現した業務を割り当てる。(優先1→優先4の順に検索)」
そうです!
各担当従業員の優先順位が高い業務から配置をするという事になります。
よろしくお願い致します。

お礼日時:2017/05/15 12:20

すみません。


確認4
⑥6人体制の場合
 3人体制と同様に決定し、残りの3人にサポートを割り当てる。

上記がもれてました。追加します。
    • good
    • 0

すみません。


確認4
④4人体制の場合
 3人体制と同様に決定し、残りの1人にサポートを割り当てる。

上記の④が2つありますが、1つは余分ですので、無視してください。
    • good
    • 0

確認1


>・一人、二人態勢の場合は「会議」、「営業」、「事務」の業務の中の「会議」と「事務」だけは優先順位が高い担当者で入力をしたいです。

では、以下の仕様でよろしいでしょうか。
1人体制の場合、会議、又は、事務の何れかを割り当てる。(どちらが割り当てられるかは事前には判らない)
2人体制の場合、会議、事務を割り当てる。

確認2
>※ただ従業員の研修期間で業務を担当出来ない方がいるのですが、設定表の担当業務に空欄がある箇所がある場合その担当者はそのまま空欄を出力させたいです。
>例としBさんの優先4の担当の「サポート」が空欄ならそのまま空欄など。

これは、要件として不適切です。
Bさんが、「会議」、「営業」、「事務」、空白と定義されても、
何日が研修日かの情報がないため、空白を何日の箇所に設定するのかが判りません。
研修期間で、当該業務を担当できない場合は、「研修」の文字を予め、いれておくことはできませんでしょうか。
例えば、Bさんが研修日が5月14,15,16日なら、15,16,17日へ「研修」の文字を設定しておきます。

マクロでは、空白の箇所のみを選んで、(つまり、「休」と「研修」)を除いて、その箇所へ業務を割り当てます。
運用上は、研修でも出張でもなんでもかまいません。そのセルが空白でなければ、割り当て不能とマクロは認識します。
従って該当日の空白の数が人数の体制になります。

確認3
担当者(Aさん~Fさん)の設定シートの業務の割り当ては、以下の仕様で行いますが宜しいでしょうか。
①優先1の場合、営業=1人、会議=1人、事務=1人、サポート=3人が割り当てられていること。
(以降、営業、会議、事務に割り当てられた要因を専従要員、サポートに割り当てられた要因をサポート要員と呼ぶ。
あなたの提示例では、Bさん,Cさん,Dさんが専従要員であり、以外の人がサポート要員となる。)
②各担当者は、優先1~優先4の割り当てで、営業、事務、会議、サポートが必ず1つずつ割り当てられていること。
例 Aさんに サポート、営業、事務、事務
  Bさんに 会議、営業、事務、空白
のような割り当てはエラーとなる。

確認4
割り当ては、要員を機会均等に割り当てるのではなく、最も優先順位の高い順に割り当てるようにしますが宜しいでしょうか。
①1人体制の場合、会議と事務の何れかを割り当て
 会議又は事務の専従要員なら、その業務を割り当てる。
 上記以外の要員なら、会議、事務が最初に出現した業務を割り当てる。(優先1→優先4の順に検索)
②2人体制の場合、会議と事務を割り当て
 2人とも会議又は事務の専従要員なら、その業務を割り当てる。
 1人が会議又は事務の専従要員なら、その業務を割り当てる。残りは、残りの業務を割り当てる。
 2人とも会議又は事務の専従要員でないなら、会議、事務が最初に出現した業務を割り当てる。(優先1→優先4の順に検索)
③3人体制の場合、会議、事務、営業を割り当て
 3人とも専従要員ならその業務を割り当てる。
 2人が専従要員ならその業務を割り当て、あとの1人は残りの業務を割り当てる。
 1人が専従要員ならその業務を割り当て、あとの2人は残りの業務が最初に出現した業務を割り当てる。(優先1→優先4の順に検索)
④4人体制の場合
 3人体制と同様に決定し、残りの1人にサポートを割り当てる。
④4人体制の場合
 3人体制と同様に決定し、残りの1人にサポートを割り当てる。
⑤5人体制の場合
 3人体制と同様に決定し、残りの2人にサポートを割り当てる。
    • good
    • 0

前回、


https://oshiete.goo.ne.jp/qa/9751595.html
で、回答したソースに1点、誤りがありました。
wk = dicT(key)
For i = 1 To 31
col = 2 + i ・・・・①
If sh2.Cells(2, col).Value = "" Then Exit For

①の箇所ですが、
C列から判定を開始するので、B列に休みが設定されることはありません。
col = 1 + i
が正しいです。お詫びして、訂正します。

ここからが本題ですが、
1)人数は5人限定になりますが宜しいでしょうか。
2)休みの設定は、別マクロで実施の前提なると、ありうる人数の体制は
1人・・・エラー
2人・・・エラー
3人
4人
5人
になります。
1人、2人の場合は、「会議」、「営業」、「事務」が確保できないので、エラーにしますが宜しいですか。
3)「会議」、「営業」、「事務」で重複の場合、赤表示とのことですが、
そもそも、これはあり得ないのではないでしょうか。
これが、発生する可能性があるのは、4人、5人の場合です。
(3人は会議、営業、事務を1人ずつ行う為、重複しない)
Aさん~Eさんは、優先順位はありますが、「会議」、「営業」、「事務」、「サポート」の何れかを選択することができます。
そうすると、「会議」、「営業」、「事務」の割り当て後、残りの人を強制的にサポートにすれば良いはずです。
あなたが、想定されている、重複ケースはどのような場合でしょうか。
(Aさん~Eさんの誰かが「サポート」の割り当てを持たないなら話は別ですが)
    • good
    • 0
この回答へのお礼

tatsu99様お世話になっております。訂正の件ありがとうございます。

本題の件についてご説明させていただきます。
・人数の限定は新人さんが一人増える予定なので「Fさん」を追加した6人限定でお願い致します。
・一人、二人態勢の場合は「会議」、「営業」、「事務」の業務の中の「会議」と「事務」だけは優先順位が高い担当者で入力をしたいです。
・重複の場合の赤表示はtatsu99様が仰る通り4、5人の場合になりますが、3業務を割り当て後、残りの担当者を強制的に「サポート」にする方法でお願い致します!
※ただ従業員の研修期間で業務を担当出来ない方がいるのですが、設定表の担当業務に空欄がある箇所がある場合その担当者はそのまま空欄を出力させたいです。
例としBさんの優先4の担当の「サポート」が空欄ならそのまま空欄など。

以上になります。
                    
よろしくお願い致します。

お礼日時:2017/05/14 14:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!