グッドデザイン賞を受賞したウォーターサーバー >>

 よろしくお願いします。
1、12名の二人一組で、一日の勤務は朝、昼、夜の三組となります。
 夏時間の朝は7時から13時、昼は13時から17時、夜は17時から21時。

2、 朝の翌日は夜の勤務、昼の翌日は朝の勤務、夜の翌日は昼の勤務という条件。つまり、夜の翌日の朝の勤務と、隔日ごとの勤務も不可条件となります。
  三勤務三休を原則とします。
  12名が三か月ごとに朝夜昼、昼朝夜、夜昼朝へ各自シフト変更し、かつ交互に均等に二人一組となる年間勤務シフトを作成したいものと考えています。

3、12名のうち6名は先輩で、その外の6名は新人となる初月の15年4月度に限り、先輩6名と新人6名間の二人一組(先輩同士間の組合せは不要)となるシフトを均等に作りたいと考えています。その場合の勤務形態は、上記のとおりですが、新人6名に限り、二勤務二休で対応しても良いとします。
  
4、エクセルのバージョンは、2003もしくは2013です。関数計算の知識は全くありません。どなたか、無償で、上記の条件を可能な限り満たす勤務シフトの作成を教えていただけませんか。よろしくお願いします。

5、当方のイメージは下図のとおりです。

「12名二人一組の勤務シフトの作り方」の質問画像

このQ&Aに関連する最新のQ&A

A 回答 (1件)

4月については、別に考えて、手作業で埋めたほうが早い気がします。



完全ローテーションでは、12人の組み合わせでどこかしら妥協しないといけません。
コートが3つの12組の総当たり戦ですので。

他の月に関して、3連勤が朝始まりか昼始まりか夜始まりか、というのはかなり大事でしょうか。

例えば

シフトを6つ用意します。
Aシフト 朝夜昼休休休
Bシフト 休休朝夜昼休
Cシフト 昼休休休朝夜
Dシフト 休休休朝夜昼
Eシフト 休朝夜昼休休
Fシフト 夜昼休休休朝

12人のうち、誰か1人だけ、Aシフトで固定
他の11人は、ABCDEFFEDCBでシフトを移動します。

これだと、66日で1周期です。
Dからcに移る時に、4連勤が発生します。
DからEに移る時に、3連勤1休3連勤が発生します。

シフト内容を色々変えると、連勤が生じたり無くなったりするんですが、それがどのパターンが一番楽か、というのは、現場の意見が重要ですので、ここでは答えが出ないかと。

単純に
Aシフト 朝夜昼休休休
Bシフト 休朝夜昼休休
Cシフト 休休朝夜昼休
Dシフト 休休休朝夜昼
Eシフト 昼休休休朝夜
Fシフト 夜昼休休休朝

とすると、DからEと、EからFで4連勤、DからAまでは3連勤2休が続くことになります。AからDまで下る間は3連勤4休ですね。


こんなかんじでどうでしょうか。
    • good
    • 0
この回答へのお礼

※ ありがとうございます。やはり「シフト内容を色々変えると、連勤が生じたり無くなったりするんですが」という回答は、貴重なご意見と感じました。質問の条件を満たすシフトを作成できるのか、その可否に疑問でしたが、「完全ローテーションでは、12人の組み合わせでどこかしら妥協しないといけません。コートが3つの12組の総当たり戦ですので」との回答を得て、安心しました。二案を取り入れて、連勤連休を年間で調整してやってみます。ありがとうございました。

お礼日時:2014/10/13 15:43

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q【大至急お願いします!!】エクセルを使ってシフト表を作成したい

【大至急です!!】
エクセルを使ったローテーションの作成方法を教えてください!!
エクセル初心者です。

人事異動で以下のような窓口当番のローテーションを作成することになりました。

会社のパソコンのセキュリティ上フリーソフトは使用できず、また、私自身のパソコンスキルからエクセルを使用して作成するよりほかないと考えています。
(私自身はマクロは使えません。)

エクセルのバージョンは2010です。

どのような方法があるか詳しくお教え下さい。

1.10名程度で2つの窓口を担当する。

2.1つの窓口に1名の担当者がつきます。

3.担当者は午前と午後で交代する。(=2名×2名で1日つき4名が必要)

4.休暇や繁忙時期を考慮する必要があるため、適宜担当できない日を考慮する必要がある。(繁忙期や休暇というのは、人によって取得日が違うため個別対応が必要という意味です。)

5.担当者の経験が分かれるため、10名を2グループに分け、なおかつ顔合わせもランダムになるようにしたいです。



ざっくりしているかもしれませんが、以上です。宜しくお願いします。

【大至急です!!】
エクセルを使ったローテーションの作成方法を教えてください!!
エクセル初心者です。

人事異動で以下のような窓口当番のローテーションを作成することになりました。

会社のパソコンのセキュリティ上フリーソフトは使用できず、また、私自身のパソコンスキルからエクセルを使用して作成するよりほかないと考えています。
(私自身はマクロは使えません。)

エクセルのバージョンは2010です。

どのような方法があるか詳しくお教え下さい。

1.10名程度で2つの...続きを読む

Aベストアンサー

>窓口が午前・午後各2名ある場合は各列にコピペして増やせば良いのでしょうか
いや、全員を2つのグループに分けてそれぞれのグループから1人ずつという風に理解していたので、その表は一人しか選びません。だって、経験によって2つのグループに分けるのですから、多分ベテランと新人のグループに分けるんでしょう?ですから、ベテラン用の表と新人用の表を2つつくってそれぞれから1人ずつ選ぶという使い方を想定しています。
もし一つの表で2人選ぶということであれば(もちろんそれが要求仕様なのですが)、根本的に作り替えなければならないので、申し訳ないですがお手伝いできないです。
ただ、別の方がアイデアをお持ちかもしれませんので、その「担当者の経験が分かれるため、10名を2グループに分け」が具体的にどういう意味なのか捕捉されておくとよいでしょう。不躾ながら正直言うとベテラン用と新人用で分けてそれぞれから一人ずつ選べばいいんじゃないかなぁ、としか思えないのです。

>お教えいただいた形の場合、何か入力するたびに再計算されるのですが、そもそもそうゆうものなのでしょうか?
そうです。ですから、エクセルの設定を手動計算にする必要があります。
リボンに「計算」というタブがあります。そこに「計算方法の設定」という項目がありますから、そこで設定します。詳しくはこちらをどうぞ↓。
https://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=012854
再計算するにはF9を押します。

>午後当番→同じ方が午前当番となってしまう事例が発生しています
それはそうなると知っていました。午前と午後で交代するということだけだったので、日付が変われば午後と午前でつながってもいいという意味だと思っていました。でも午後-午前も一緒に禁止する方が実装するのは簡単です。Plan Optimized の部分は第一日目の午前を除いて、全部同じにすればいいです。つまり第一日目の午後をそのままま全シフトにコピーすれば午後-午前もなくなります。
ただ前の月の最後のシフトとの関係は人間が確認しなければならないです(これは前のバージョンでも同じ)。

>何度再計算しても各人の当番回数がかなりばらついてしまいます。
そうですね。それは手で調整することを想定しています。私の手元では5人の表を作ったので何回かやるといい感じのが出てくるのですが、それでも特定の期間にかたまってしまうというようシフト表になってしまいます。10人でやるとさらに理想的なシフト表ができにくいかもしれません。でもまるっきり白紙の状態から手で作るよりはかなり楽になるのと思うのですが。
また、本質的な解決方法じゃないですが、過去の3シフトに入っていた人からは選ばない、というような条件を付け加えると、少しはましになるようです。「過去の3シフト」の縛りを加えるには、Plan Optimized の項目で第2日目の午後シフトを =If(CountIf(B24:D24,"√")>0,"x",If(E4="x","x","")) として下と右にコピーしていきます。ただし、この縛りを入れると、とても規則的なシフト表になるとか、誰も入れない日がいくつも出てくるとか、別の問題も出てきます。

>パソコンに詳しい方からすれば無茶な質問であることは理解しております。
私はそうは思いませんが、ただエクセルのファイルのままで渡せないとかいうのがありますので、こういう掲示板でやり取りするとちょっと時間かかるのはたしかですね。

>窓口が午前・午後各2名ある場合は各列にコピペして増やせば良いのでしょうか
いや、全員を2つのグループに分けてそれぞれのグループから1人ずつという風に理解していたので、その表は一人しか選びません。だって、経験によって2つのグループに分けるのですから、多分ベテランと新人のグループに分けるんでしょう?ですから、ベテラン用の表と新人用の表を2つつくってそれぞれから1人ずつ選ぶという使い方を想定しています。
もし一つの表で2人選ぶということであれば(もちろんそれが要求仕様なのですが)、根本...続きを読む

Q仕事のシフトを組むときに、シフトが同じになる回数を均等にしたいんですが

仕事のシフトを組むときに、シフトが同じになる回数を均等にしたいんですが、
簡単に表でできるでしょうか?

たとえば
  1 2 3 4 5 6 7 ・・・
あ A A B B A A B ・・・
い A B A B A A A ・・・
う B A A A B B A ・・・
え B B B A B B B ・・・

のように、横軸が日付。あ、い、う、えの4名でシフトを組んで、
Aは 早番
Bは 遅番
というシフトを組んでまわしたいのですが、
遅番でペアになる組み合わせ(回数)をみんな均等にしたいのです。
「私いつもあの人と遅番一緒だ」などとならないように、、、(汗

これが、A,Bといれていけば誰と誰の遅番の組み合わせが何回あって、
多いところと少ないところが一目でわかって修正できるような、
そんな表をつくれないでしょうか?
(めんどくさがりすぎですかね?^^;)

説明が下手ですみません。
エクセルでできるかできないか、わかる方がいらしたら教えてください。

よろしくおねがいします。

Aベストアンサー

AABB ABAB ABBA BAAB BABA BBAA
http://pc.nikkeibp.co.jp/pc21/tech/excel36/07/index.shtml
http://www.eurus.dti.ne.jp/~yoneyama/Excel/kansu/count.htm#countif
__A__B__C__D
1_あ_A__B__A
2_い_A__B__B
3_う_B__A__A
4_え_B__A__B
5_式
B5セルに計算式を入れて1つにまとめます
=B1&B2&B3&B4
これを横にコピーします
種類ごとに個数を数えるには COUNTIF関数を使います
組合せの中でどれが 多い 少ない というのがわかるようになります

Q10人を2人づつ5組にランダムに分けて表示したい。

AからJまでの10人を1組2人づつに分ける組み合わせは
COMBIN(10,2)+COMBIN(8,2)+COMBIN(6,2)+COMBIN(4,2)=94通り
と思われますが、これら94の組み合わせの中から、任意の1つをランダムに表示出来るようにしたい、できればEXCEL(関数またはマクロ)で。
よろしくお願いいたします。

Aベストアンサー

>ランダムな順に10人をピックアップ」も人手ではなくパソコンでやって
>ほしいのです。

他の方の回答も含めて、そのつもりで回答されていると思いますけれど、何を人手でやるおつもりなのでしょうか?
マクロでやるならその通りの処理をOpenイベントで実行すればできますし、関数利用でも別に難しいことではありません。

関数の場合の一例を、説明した手順通りに分解して表示するなら…
A1~J1に対象となる名前があるとして
A2に =RAND()               :順番のもとになる乱数
A3に =RANK(A2,$A2:$J2)        :乱数を元に順番付け
A4に =MATCH(COLUMN(),$A3:$J3,0) :順に並べた時の対称の列番号
A5に =INDEX($A1:$J1,A4)        :乱数の順に並べ替えた名前
を入力して、A2~A5を選択して、右にコピーフィル。
5行目に乱数順に並べ替えた名前が表示されます。
(組み合わせは先頭から2人ずつ)

計算の手順がわかるように、1行ずつに途中経過を表示していますが、実際は途中を省略できますので、あとは適当にアレンジしてください。

(注意)Rankを使用しているので、乱数値がたまたままったく同じ値だとうまくいきませんが、RANDは実数になるので、そのようなことが起こる確率は非常に少ないと考えてよいとしています。

>ランダムな順に10人をピックアップ」も人手ではなくパソコンでやって
>ほしいのです。

他の方の回答も含めて、そのつもりで回答されていると思いますけれど、何を人手でやるおつもりなのでしょうか?
マクロでやるならその通りの処理をOpenイベントで実行すればできますし、関数利用でも別に難しいことではありません。

関数の場合の一例を、説明した手順通りに分解して表示するなら…
A1~J1に対象となる名前があるとして
A2に =RAND()               :順番のもとになる乱数
A...続きを読む

Qシフト勤務で必要な人数

お世話になります。

今度勤務監理をする立場になりシフト制を導入する予定ですが
シフトを組むのに最低何人必要か教えてください。
宜しくお願い致します。

『条件』
勤務は365日で時間は8:00~17:00固定。(残業は無し)
1日最低8人は出勤状態を作りたい。

Aベストアンサー

おはようございます。

1日8人必要なら、1ヶ月で240コマ(8人×30日)必要です。

フルタイムの職員が月に21コマ働くなら、11.5人程度(240÷21)必要になります。

フルタイム12人なら252コマになりますので、12日は9人体制にできます。

Qエクセルで当番表をつくりたいのですが、簡単な関数を使ってできません。私

エクセルで当番表をつくりたいのですが、簡単な関数を使ってできません。私のレベルは中級くらいです。当番表の内容は、21名がそれぞれ所有する田んぼの面積に応じて田んぼの水を入れる当番です。当番は二人一組で、行います。面積の広い人は、回数が多く、少ない人は回数が少なくあたるようにします。公平なものにならなくてはいけません。3~4か月間の毎日です。同じ面積の人も10名位いるので、私は、全体面積に対する割合を出して、間隔日数を出す。後・・それぞれの割当たる間隔日数を崩さずに当たるようにする。・・・などあるのですが、・・私には、難しいので、どうかそんなの簡単だと思われる方は、至急回答お願いします。できたら、私でも理解しやすい表現で回答いただけたら、うれしいです。よろしくお願いします。

Aベストアンサー

#4です。以下貼り付けください。
Sub Toban()
Dim Ws1 As Worksheet, Ws2 As Worksheet, Ws3 As Worksheet, Rng As Range
Dim r As Integer, c As Integer, p As Long, q As Long
Set Ws1 = Worksheets("Sheet1")
Set Ws2 = Worksheets("Sheet2")
Set Ws3 = Worksheets("Sheet3")
Ws1.Select
Set Rng = Cells(1, 1).CurrentRegion
With Rng
.Copy
.PasteSpecial Paste:=xlPasteValues
.Sort _
Key1:=Cells(1, 3), _
Order1:=xlDescending, _
Header:=xlNo, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom, _
Sortmethod:=xlPinYin
End With
For r = 1 To 21
For c = 1 To Cells(r, 3)
Cells(r, c + 3).Value = Cells(r, 1) & c
Next c
Next r
Ws2.Select
Dim Hiduke As Date
Hiduke = InputBox("開始日入力。yyyy/m/d")
q = 0
For p = 0 To 178 Step 2
Range(Cells(1 + p, 1), Cells(2 + p, 1)).Value = Hiduke + q
q = q + 1
Next p
q = Ws1.Cells(1, Columns.Count).End(xlToLeft).Column
For p = 4 To q
Range(Ws1.Cells(1, p), Ws1.Cells(Rows.Count, p).End(xlUp)).Copy
Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteAll
Next p
Cells(1, 2).Delete
Set Rng = Cells(1, 1).CurrentRegion
For p = 0 To 89
Cells(p + 1, 4).Value = Cells(1, 1) + p
Cells(p + 1, 5).Value = Application.WorksheetFunction.VLookup(Cells(p + 1, 4), Rng, 2, 0)
Cells(p + 1, 6).Value = Application.WorksheetFunction.VLookup(Cells(p + 1, 4), Rng, 2, 1)
Next p
Set Rng = Cells(1, 4).CurrentRegion
Range(Cells(1, 4), Cells(1, 4).End(xlDown)).Copy Ws3.Cells(3, 1)
Range(Ws1.Cells(1, 1), Ws1.Cells(21, 2)).Copy
Ws3.Cells(1, 2).PasteSpecial Transpose:=True
Ws3.Select
Range(Columns(2), Columns(22)).ColumnWidth = 6
Dim Ret As Integer
For r = 1 To 90
For c = 5 To 6
Ret = Application.WorksheetFunction.Match(Left(Ws2.Cells(r, c), 1), Ws3.Rows(1), 0)
With Ws3.Cells(r + 2, Ret)
.Value = "■"
.HorizontalAlignment = xlCenter
End With
Next c
Next r
Set Ws1 = Nothing
Set Ws2 = Nothing
Set Ws3 = Nothing
End Sub

#4です。以下貼り付けください。
Sub Toban()
Dim Ws1 As Worksheet, Ws2 As Worksheet, Ws3 As Worksheet, Rng As Range
Dim r As Integer, c As Integer, p As Long, q As Long
Set Ws1 = Worksheets("Sheet1")
Set Ws2 = Worksheets("Sheet2")
Set Ws3 = Worksheets("Sheet3")
Ws1.Select
Set Rng = Cells(1, 1).CurrentRegion
With Rng
.Copy
.PasteSpecial Paste:=xlPasteValues
.Sort _
Key1:=Cells(1, 3), _
Order1:=xlDescending, _
Header:=xlNo, _
Order...続きを読む


人気Q&Aランキング