[[20140422223127]] 『勤務割表の作成方法について教えてください』(新人管理担当) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『勤務割表の作成方法について教えてください』(新人管理担当)

4月の定期異動により初めての部署に異動して業務を覚えることに必死ですが、担当業務意外に係員の勤務割表を作ることを命じられました。
前任者は手作業で勤務割表を作成しているとのことですが、かなり時間がかかるのでエクセルを使用して簡単に勤務割表を作成できないか考えてるのですが、条件がいろいろあり自分で作成することができません。
皆さんのお知恵をお借りして本来業務以外のことに時間を割かないで済む方法を見つけれればと思っています。
よろしくお願いします。

条件
・勤務員は12名(A〜Lとします)です
・係長が1名(A)、副係長は3名(B〜D)、係員は8名(E〜L)です。
・12名を6名と6名の2班(甲班、乙班)に分けます。
・係長は常に甲班に含み、副係長のうち少なくとも1名は乙班に含みます
・1ヶ月の勤務日数は9〜11日です
・係長を除き、全員が年間を通して甲班と乙班の勤務がなるべく均等になるようします
・一年を通じて全ての人と均等に勤務するようにしたい(特に管理職は特定の係員と勤務が偏らないようにしたい)

作成したい表は下記のような表です
○月△日(火) 甲班  A C E G I K  
          乙班  B D F H J L
○月▲日(金) 甲班  A B F G J K
          乙班  C D E H I L
 ・         ・
 ・         ・
 ・         ・
✖月●日(月) 甲班  A C E F G H
          乙班  D B I J K L

どうか宜しくお願いします

< 使用 Excel:Excel2007、使用 OS:Windows7 >


=INT(RAND()*(365-1))
これで完璧です
(se__9) 2014/04/23(水) 09:22

ご回答ありがとうございます。

残念ながらその数式をどのように活用すればいいのか、初心者の私にはわかりません。
可能でしたらもう少し解りやすくご教授願えませんでしょうか?
宜しくお願いします。
(新人管理担当) 2014/04/23(水) 13:20


 上記は se-9 さんを騙った、最近出没している掲示板荒らしのものと思われます。
 (だんだん悪質化してきましたね・・・。)

 無視して、他の方の回答をお待ちください。
(Mook) 2014/04/23(水) 13:37

6人2チームで、構成員は12名ということは、常に全員を割り当てですね?
ABCDを、常に2人ずつに分けるという制限はアリでしょうか? 少しは簡単になると思います。
係長以上の組み合わせが以下の6通りになりますので、C列D列は予め6パターン入力しておいてください。
(今後は6パターンまとめてコピペしていく繰り返しになります)

abcd
abdc
acbd
acdb
adbc
adca

次に、残りの8人はランダムで割り振るのが、簡単で平等と思われます。
シートにActiveXのボタンを貼り、以下のマクロを貼り付けてください。

 Private Sub CommandButton1_Click()
    Dim i As Long
    Dim j As Long
    Dim iSt As Long
    Dim jMax As Long
    Dim iw As Long
    Dim cw As String
    Dim cName() As Variant

    cName = Array("Eさん", "Fさん", "Gさん", "Hさん", "Iさん", "Jさん", "Kさん", "Lさん")

    Randomize
    jMax = UBound(cName)
    iSt = Cells(Rows.Count, "E").End(xlUp).Row
    If iSt <> 1 Then
        iSt = iSt + 1
    End If

    For i = iSt To Cells(Rows.Count, "C").End(xlUp).Row Step 2
        For j = 0 To jMax
            iw = Fix(Rnd() * (jMax + 1))
            cw = cName(j)
            cName(j) = cName(iw)
            cName(iw) = cw
        Next j
        For j = 0 To jMax
            Cells(i + Fix(j / ((jMax + 1) / 2)), j Mod (Fix((jMax + 2) / 2)) + 5).Value = cName(j)
        Next j
    Next i
End Sub
(???) 2014/04/23(水) 18:15

 条件が矛盾しますので、どこまでを許容範囲とするかを記載下さい
 >・係長は常に甲班に含み、副係長のうち少なくとも1名は乙班に含みます 
 A    BCD
 AB   CD
 AC   BD
 AD   BC
 ABC  D
 ABD  C
 ACD  B
 係長、副係長の組み合わせでも 「全ての人と均等に勤務」を満たせません

 >・係長を除き、全員が年間を通して甲班と乙班の勤務がなるべく均等になるようします 
 同じ回数という意味ではなく 同じ割合と言うことでいいですか?
 (この場合、係長と同じになる回数は少なくなります)
(By) 2014/04/23(水) 20:00

あぁ、そうか、並び順は無視できるので、私の案(常に係長以上2人にする)だと、
組み合わせは3パターンで済みますね。

abcd
acbd
adbc
(???) 2014/04/24(木) 08:45


(???)さん、(By)さん 早速のご回答ありがとうございます。
出張中のためPCを開くことができませんでした。申し訳ありません。
夜にでもエクセルで試して、またご質問させて頂くことになるかもしれませんがよろしくご指導願います。

(By)さんのご指摘ですが、各副係長及び各係員それぞれが年間を通じて甲班と乙班を勤務する割合を均等にするようにしたい という意味です。
最初の条件説明が解りにくくてすいません。

(???)さんの作成(案)は、管理職4人と係員8人を分けて班編成を作成するという案ですね。
そうすると、管理職4人分の班編成と係員8人分の班編成を組み合わせて作成すれば勤務編成が簡単になりますね。

ひと月の勤務日数は9〜11日なので、組み合わせた1日分の編成を9〜11段重ねれば一瞬でひと月分の勤務編成表ができることになりますね。

エクセル超初心者なのでまずは帰宅したら「ActiveXのボタンを貼り、以下のマクロを貼り付けてください」から試してみます。

自分で調べて格闘してみますが、またご教授をお願いします。

(新人管理担当) 2014/04/25(金) 16:40


こんにちは。

別案の提案です。
(こんなのでいいならそもそも質問されないかな、と思いつつ。)
1)前任のかたが作成された勤務割表を手に入れ、
2)日付だけ書き換える。

> 副係長のうち少なくとも1名は乙班に含みます
1名の日もあれば3名の日もある。常に常に同じ人数であってはならない、
と解釈しましたが、そうでもないのでしょうか。

(佳) 2014/04/25(金) 17:38


 こんな感じでいかが

   A  B  C  D  E  F G  H  I  J  K  L  M  N  O  P  Q  R  S
 1                  い う え お か き く け こ さ し     
 2 あ
 3 

 A2に係長の氏名
 I1:K1に副係長の氏名を入力
 L1:S1に係員8人の氏名を入力

 I2に =RAND() と入力 I2:S2 にコピー

 I3に =RANK(I2,$I2:$K2) と入力 I2:K2 にコピー
 L3に =RANK(L2,$L2:$S2) と入力 L2:S2 にコピー

 H2に =LOOKUP(INT(RAND()*7),{0,1,4},{0,1,2})

 B2に =IF(COLUMN(A1)>$H2,INDEX($L$1:$S$1,MATCH(COLUMN(A1)-$H2,$L3:$S3,0)),INDEX($I$1:$K$1,MATCH(COLUMN(A1),$I3:$K3,0))) 
 と入力 B2:F2 にコピー
 A3に =IF($H2+COLUMN(A1)>3,INDEX($L$1:$S$1,MATCH(COLUMN(C1),$L3:$S3,0)),INDEX($I$1:$K$1,MATCH(COLUMN(A1)+$H2,$I3:$K3,))) 
 と入力 A3:F3 にコピー

(By) 2014/04/25(金) 21:15


(By)さん こんばんは
早速のご教授ありがとうございます。
いま、エクセルに入力して仮作成してみました。
ひと月分になるように、11段にコピーしてエクセル本に書いてあったマクロを併用して乱数を発生させやすくして、更に簡単に編成が組めるように拡張中してみました。
マクロをクリックすれば、11通りの勤務人員が割り振られて簡単に作成できるようになりました。
本当にありがとうございます。

大変厚かましくて恐縮なのですが、2点ほど質問させてください。
まず、1点目なのですが、マクロで乱数を発生させると11段すべての乱数が変わり、人員が組み直されます。これを、例えば3段目だけ乱数を再発生させて3段目だけ人員を組み直すことはできるのでしょうか(例えば、AさんがBさんと1回も同じ班にならないか状況になってないかチェックしています。11段全部を再度組み直すと全員の組み合わせパターンを見直さなければならなくなってしまうので、個別に任意の1段だけ乱数を再発生させることができたら都合がいいと・・・)。

2点目ですが、各人員の甲班乙班の勤務日数を毎月集計して偏りがないかチェックする表も合わせて作っています(甲班と乙班でかなり勤務に差があるので不平がでないようにするためです)。手作業で回数を数えていけばいいのですが、こんなに便利なものを教えて頂けたのでついでと言っては大変失礼ですが、この人員編成表から自動で各人員の甲乙の回数を数えることができたらなぁ と甘い期待が湧いてしまいました。
何かいい案がありましたら宜しくお願いします。

(新人管理担当) 2014/04/26(土) 00:01


(佳)さんへ
前任者が作成した勤務割りを日付だけ変えてしようすることはできないのです。
4月の人事異動で人が入れ替わり休職者の補充も行われているので人数も変わりました。

係長と副係長合わせて4名いますので、原則的には2名ずつにしたいですね。
通常の業務をこなす分には1:3でも問題ないのですが、トラブルが発生した場合にどうしても責任者の判断が必要になりますから。
別にベテラン係員も多くいますので係員だけで対処可能なのですが、やはりそこは組織なので誰が決断して指示をしたのか明確にする必要はでてきますね
(新人管理担当) 2014/04/26(土) 00:14


 条件の優先順位、許容範囲が小出しに出されますね(条件も変わってきているようですね)

 >係長と副係長合わせて4名いますので、原則的には2名ずつにしたいですね。 
 H2に =LOOKUP(INT(RAND()*7),{0,1,4},{0,1,2})を
 H2に 1を入力でいいかな(他の式も簡単にできますが省略)

 >大変厚かましくて恐縮なのですが、2点ほど質問させてください
 1点目の質問について
 すべて乱数処理するのではなく
 (11段分一括で処理するのでなく、1段ずつ処理)
 *範囲A2:F3を選択 コピー 2段目に 形式を選択して貼り付け(値にチェック)
 この時点で、A2:F3の値も変更されますので
 *範囲A2:F3を選択 コピー 形式を選択して貼り付け(値にチェック)を11段繰り返す
 上記考え方を利用して、個別に任意の1段のみ変更も可能ではないでしょうか

 2点目の質問について

   A  B  C  D  E  F G  H  I  J  K  L  M  N  O  P  Q  R  S
 1                あ い う え お か き く け こ さ し     
 2  あ  い  き  か  こ  し
 3  う	え お け さ く
 4
 5  あ う い お し か
 6  え さ く き こ け
 7
 8  あ い う き け お
 9  え	し こ	く か	さ
 10					
 11 あ	え し	け お	さ
 12 い	う こ	く き	か

 甲班の回数
 H2=SUMPRODUCT(($A$2:$F$33=H1)*(MOD(ROW($A$2:$A$33),3)=2))
 H2:S2にコピー

(By) 2014/04/26(土) 09:04


(By)さんへ

返信ありがとうございます
最初にご相談した優先順位及び許容範囲が小出しになってすいません。
複雑になると無理ではないか勝手に判断し、わかり易い条件をお示しし後から手作業で修正すればいいかと思っていました。

今日は仕事で明日の朝まで勤務しているので、明日帰宅してからチャレンジしてみようかと思います。

早速のご回答本当にありがとうございます。
(新人管理担当) 2014/04/26(土) 14:06


(By)さんへ

5月分の作成が完了しました。
お陰で作業手順が大幅に改善されました。

いろいろありがとうございました

(新人管理担当) 2014/04/30(水) 23:19


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.