[表示 : 全て 最新50 1-99 101- 201- 301- 2chのread.cgiへ]
Update time : 05/25 10:59 / Filesize : 129 KB / Number-of Response : 354
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

ExcelVBAで勤務表を作ろう



1 名前:デフォルトの名無しさん [2012/02/21(火) 14:48:32.47 ]
Excel VBA 質問スレ Part23からの移動

Excel VBA で勤務表を作るスレです

Excel VBA 質問スレ Part23
toro.2ch.net/test/read.cgi/tech/1327763113/


45 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 10:08:35.56 ]
1日何時間やって半年とか1年とか言ってるんだろう?
最低で1,000時間、満足できる自動処理ができるものは、2,000〜3,000時間かかると思うぞ。

46 名前:デフォルトの名無しさん [2012/02/24(金) 20:48:53.44 ]
仕事の内容をまとめるとこんな感じか
チーフ業務…主任、副主任が担当
事務処理…主任以下4名程
記録係…正職員のみ(但し中級以上)
見守り…中級以上?
各種介助
雑務、清掃

組合せのパターンでいうと夜勤の主任、副主任のペアも駄目だし、どちらかが明け、休み、出張の場合片方が日勤A〜が望ましい
また新人の場合も数ヶ月間は日勤扱いのみになるのでわ?

47 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 20:59:42.22 ]
だいたい今手で計算してる事をそのままコードにするだけなんだから時間割作成者が書けば余裕だろ。

48 名前:278 mailto:sage [2012/02/24(金) 21:23:57.78 ]
>>46
チーフ業務=事務処理になるかな
あと主任は3月で退職するからもう事務処理とかそういうのからは他の人に任せてます
なので副主任入れ3人でやってます
記録係りは嘱託、パートはできず、
見守りはパートができません
夜勤組み合わせで主任、副主任のペアは大丈夫です
あと二人とも休みというのもいつもあるので問題ないです
新人は数ヶ月は日勤で、他の職員につくことになるので
そこは手書きで追加にしようと考えています

49 名前:46 mailto:sage [2012/02/24(金) 21:33:36.28 ]
新たな主任が別の部署から移動で配属される可能性は有る?

50 名前:278 mailto:sage [2012/02/24(金) 21:50:10.35 ]
>>46
副主任が主任に、平社員か他部署から来る人が副主任になると思われます
でもあんまり主任とか関係ないかな

51 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 22:30:13.07 ]
>>44
>>44
ありがとうございます

あと、当月の条件(Aさんは18日は休み、Bさんは20日は早番、
22日は、CさんDさんEさんは打ち合わせのため日勤、
24日は行事のため〜〜など)
も、どのようなものがどの程度、指定されるのか
要件書に書き加えてほしいと思います

また、
1.メニュー(新規作成ボタンや職員データ編集ボタン、その他条件ボタンなど)
2.新規作成ボタンを押す
3.何年何月と指定(デフォルトで翌月)
4.職員データなどを参照してブランクの勤務表を自動作成(式や条件付き書式あり)
5.当月の条件を入力(ブランクの勤務表に)
6.作成ボタン
7.勤務の空欄を自動で埋める(日勤の番号が2〜7入ったもの)
8.乱数の種を変えたり、当月の条件を変えたりして試行錯誤する
9.5〜8を繰り返す
10.気に行ったパターンの中から1つを選択する(最終的に手入力で修正しても良い)
11日勤の番号の入った勤務表を当番表に変換する

の流れを考えていますが、
11の変換のプログラムは易しいと思いますので
もし、余裕でできるというのでなければ
ここから作成してはいかがでしょうか?

それから、早番が5日以内にあればセルの背景を赤にする、
とかいうことは、条件付き書式で実現したほうが良いと思います
手入力でも使いやすいので。
好みの問題かも知れませんが

52 名前:278 mailto:sage [2012/02/24(金) 23:57:08.21 ]
とりあえず・・・
>それから、早番が5日以内にあればセルの背景を赤にする、
>とかいうことは、条件付き書式で実現したほうが良いと思います
これを試してみようと思ったのですがうまくできませんでした
(セルH5で)=OR(C5="早",D5="早",E5="早",F5="早",G5="早")
これに加えて「H5セルも早番の場合」を付け加えるのがうまくいきません

53 名前:278 mailto:sage [2012/02/25(土) 00:08:53.70 ]
>5.当月の条件を入力(ブランクの勤務表に)
というのがその月の希望休や希望勤務を入れる、ということでしょうか?
そうでしたら(Aさんは18日は休み、Bさんは20日は早番、22日は、CさんDさんEさんは打ち合わせのため日勤)
というのはそのまま希望勤務に入力して反映できればと思っています
(打ち合わせのところは適当に日勤の番号を考えて希望勤務に手入力)
行事のため〜は別に「その日の必要日勤者数」みたいなものを作らないといけなくなると思うので
これも適当に人を選んで希望勤務に入力することになるかと考えています

>11日勤の番号の入った勤務表を当番表に変換する
ですが自分の考えでは7.で日勤の番号が2〜7入ったものとなっているので
その時点で当番表になっているのかなと思ったのですが違ったでしょうか?



54 名前:18 mailto:sage [2012/02/25(土) 00:29:31.02 ]
>>52
そこにAND条件を加えればいいだけです
私はMATCHをつかって
=AND(自己セル="早",MATCH(自己セル,自己セルの5コ左:自己セル)<6)
のようにしました

>53
勤務表に直接指定の勤務や休日を入力します
必要人数は18のように処理します
勤務表で指定の勤務を変えたり、その日の必要人数を変えたり
乱数の種を変えたりして、いろいろ試しながら作成するわけです

勤務表の形式の、縦が職員名で横に日付があり、セルに勤務番号
から、
当番表の形式、縦が日付で横に勤務番号があり、セルに職員名
へと変換するわけです



55 名前:278 mailto:sage [2012/02/25(土) 13:41:06.19 ]
>>54
ANDを使ってできました
夜勤の次が明け、休みになっているかや夜勤の3日前が夜勤じゃないかも
同じように条件付き書式でやったほうがいいですかね
ただこれ全部のセルに一つ一つやるのは大変だ…

今使ってる当番表及び勤務表と同じように作っていただけているんですね…
ありがとうございます
勤務表→当番表に変換するように作っていきたいと思います

56 名前:46 Excel2000使い mailto:sage [2012/02/25(土) 15:19:01.60 ]
>>54じゃないので…

オートフィルで横は31日まで縦はメンバーの最後まで引っ張れば条件付き書式も展開されない?

57 名前:18 mailto:sage [2012/02/25(土) 20:28:12.02 ]
>>55
条件付き書式については
私は範囲選択してから入力しています
条件付き書式のルールの管理であとから修正することも
あります

進捗は、まだ18以降作業していません

ただ、実務で使う書式は「なるべく」変えない方がいいとは思っています

あと、
1年後の運用を仮定して、実行環境と278さんの開発環境を教えてください

私は、主にVistaでExcel2007、サブに7でExcel2010を使います

58 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 09:09:59.36 ]
まだ制約事項について俺の頭の中でまとまらない…
・パート2人以外に掃除人Qさんがいるんですよね
この3人は日曜出勤はあります?
後パートの方は労基法やパート側の税金対策で働ける日数制限があるのも頭が痛い…
・日曜の日勤でCDFM、CDLM等の組合せは今あります?また3月以降にこの組合せが発生しても大丈夫?まあBEFGHJKは他のメンバー及び新人二人が育つまではかなり負担がかかるなあ

59 名前:278 mailto:sage [2012/02/26(日) 11:32:35.44 ]
明けの回ってない頭で失礼します
掃除人さんはまったく考えなくていいと思います
介助や見守りはできないです
3人とも日曜出勤はありますが、Pさんと掃除人さんは日曜にいることはまずないです
(本人休みも毎回希望するため)
パートさんは休みを全部指定するので、逆に指定休入っていないところは全部日勤でいることになります
CDFMとCDLM問題ないです
MやCとFなどは夜勤を組ませなければ大丈夫です
新人が育つまできついですね;
施設全体で今月1人やめて、3月で4人退職、ついでに1人只今妊娠中と…
これで入ってくるの2人って今から頭痛いですよ(--;
というか完全に回らない気がする…

60 名前:18 mailto:sage [2012/02/27(月) 00:42:10.91 ]
テスト的に職員データ管理用のブックを作成中
www.dotup.org/uploda/www.dotup.org2686872.xls.html
pass:vba

現在の実装済みの機能は、
職員情報シートからの読み込みのみです

プロシージャshowUserform_staffData()を実行し、
職員選択のコンボボックスで読み込む職員を選択します



61 名前:18 mailto:sage [2012/02/27(月) 01:58:40.24 ]
一息入れると
>>60のユーザーフォームに
職員データの削除ボタンと
夜勤の組めない職員の解除のボタンが
ないことに気付きました

また、
278さんの要件の文書に書かれているものや
まだ書かれていない潜在的なものを含めて
要件を満たすために
このデータで十分なのかどうか分かりません


62 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 16:32:07.54 ]
全然協力しようなんて思ってないけど、コード見た感想言うよ。

・情報を保存する場合は、以後どう使うかを考えてシートを分ける
 個人的には、データを正規化しといた方がいいんじゃないかという予感。
 全体を一覧して見るページが必要なら、それはそういうページを別途作る。

・空行を入れない
 空行を入れるとoffset(0, 1)とか"+1"とか"-1"とか、本質的では無い位置指定がコードのあちこちに出てくるからね。

・悪いけど、コード読む気しない
 引き継げないよ?

63 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 16:40:08.88 ]
あと、やっぱ>>51の7〜9と10の実現方法を先に考えた方が良くない?
UIなんて後付けでいいよ。実現の目処が立たなきゃ、苦労して作ったUIも無駄になるよ。

7〜9でどれくらいの満足度のものを作るのかわからないけど、単純に組み合わせると10の数十乗のオーダーに
なるもののどれを10の候補とするのか考えなきゃ。

もうちょっと想像を進めれば、とてもじゃないけど例えば10通りの候補を選び出すのは大変で、
10通りに絞れたとしても、それが理想に近いか目で見て判断するの難しいよ?
15人*30日の450マスに理想と全然違うぐちゃぐちゃの10枚のどれがいいかなんて選べる?



64 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 16:44:04.91 ]
そうそう忘れてた。
セル領域には名前を付けることが出来て、Range()はその名前を引数に指定できるから。
範囲に名前を付けてもいいし、データの塊の左上1セルに名前を付けてもいいよ。

65 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 16:57:40.18 ]
>>62
それ以前にリアル業務が頭数足りないのは明白なんだからルール変更は普通にあるだろうな
業務体制を根本から見直す必要があるかも

66 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 17:22:40.25 ]
>>65
あ、そうなの?
詳しく読んでないから知らなかった。

67 名前:278 mailto:sage [2012/02/27(月) 17:30:42.10 ]
>>60
遅くなりました
職員情報管理すごくよくできていると思いました
データとして十分な気はします
あとは条件を満たした振り分けがうまくできるかどうかですが…

>>61
とても細かく指摘していただいてありがとうございます
自分だとそういったところに全然気づかないのでとてもありがたいです

ルール変更は多分ないと思います
人数最低限で何とか進めるしかないのかと…


68 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 17:40:31.46 ]
>>67
> 職員情報管理すごくよくできていると思いました
> データとして十分な気はします

それマジで言ってんの?
人の増減とかがあったらどうすんの?
同じ名字の人がいたらどうすんの?
コード読めた?
ダイアログださいだろ。
つか、最初のシートに手入力が一番速くね?

69 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 17:50:37.31 ]
絶対不可侵だと思いこんでいたルールであっても
相談あるいは交渉によってあっさり変更されてしまったりするのが
現実世界の理不尽さというか面白さだと思うんだ
一人で思い詰めてもよくないよ

70 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 17:56:35.53 ]
>>67
> あとは条件を満たした振り分けがうまくできるかどうかですが…

なんかここ自動化できそうだとか思ってない?
まず無理だから。

71 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 18:20:25.55 ]
>>60
マスタデータと、計算途中の値を保存する領域と、勤務表が確定した後のデータをごっちゃにしてるのが致命的。

72 名前:278 mailto:sage [2012/02/27(月) 21:23:00.17 ]
>11日勤の番号の入った勤務表を当番表に変換する
もっと簡単な方法があるのかもしれませんが一応できました
www.dotup.org/uploda/www.dotup.org2689511.rar.html
pass:vba
細かいところがなかなかうまくいかないです…

73 名前:18 mailto:sage [2012/02/27(月) 23:02:40.00 ]
>>72
お疲れ様です

処理方法は変えていませんが、
・Option Explicit をつける
・Select Case を使う
・当番と職員名は変数にする
など変更してみました

www.dotup.org/uploda/www.dotup.org2689961.xls.html
pass:vba



74 名前:デフォルトの名無しさん [2012/02/28(火) 00:15:17.62 ]
>>73
少し変えただけでだいぶ見やすくなりますね…
大好きなIfにとらわれずCaseも使っていくようにしなくては;
Option Explicitチェック入れ忘れてました、失礼しました

大変勉強不足で申し訳ないのですがCLngの長整数型に変換するというのはどういった使い方になるのでしょうか?
.Cells(h - 5, CLng(Right(touban, 1)) + 13) = staff
の辺りなどなぜこうできるのか分からなくて…

75 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 07:09:36.40 ]
>>74
(あまり本質的なところではないと思いますが、)
"夜1"や"夜2"という文字列の右から1の長さの
文字列を切り出して("1"や"2")
それを数値に変換して13(マジックナンバーですが)
を足して当番表の該当列に合わせています

私はLongはVBAでは長整数型というより標準的な整数型として
使っています(4バイトの整数型という意味で)
明示的に数値に変換しなくてもVBAでOKかも知れません
自分が分かりやすいように




76 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 10:38:33.86 ]
そこはvalの方がいいんじゃないか?
あくまで文字列を数値として解釈したいんだろ?
ってか、そこを含めて勤務帯マスタにしとけよ…マスタってなんなんだよ…

77 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 11:40:28.51 ]
>>73
またまた無責任なコメント言うよ。

・range.currentregion.rows.countとかrange.currentregion.cols.countとか使おうよ
・基本的にselect必要無いから

78 名前:278 mailto:sage [2012/02/28(火) 13:59:44.52 ]
>>75
そんな方法があったんですね、知りませんでした
Longもそんなふうに使えるとは…
ありがとうございます

79 名前:42 mailto:sage [2012/02/28(火) 14:02:31.42 ]
他の人が言っているようにルール変更の危惧大ありなんだよなあ
とはいっても主任は夜勤禁止とかぐらいだろうけどメンバーがごっそり移動とかならよく有る事。
俺の元いた職場(ガススタ)での例(7時〜20時営業、配達業務あり)

・A店(5名体制) 所長とベテラン2名が移動(新所長はスタンド経験無し、ベテラン、新人1名)
・B店(3名+アルバイト1名…半年前に採用) ベテラン2名入替(初心者と新人)またB店所長はC店所長も兼務していたが、そちらも移動あり)

文面から来月には新体制になるみたいだからそれまでは根を詰めずにね

80 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 14:08:53.94 ]
ド素人の糞コード対ド素人の会話に口出ししたくてムズムズするは

81 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 14:10:06.65 ]
月の途中で抜けたり、月の途中から入るってのは無いの?

82 名前:56 mailto:sage [2012/02/28(火) 14:16:12.52 ]
>>79
42じゃなかったm(__)m

83 名前:278 mailto:sage [2012/02/28(火) 14:23:30.69 ]
>>79
自分の職場はルールを変えたりするのを理事長(現トップ)が嫌うので多分ないとは思います
あった時は…大変ですけど;

>>81
月の途中で抜けたり入ったりはまずないです



84 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 14:40:04.17 ]
まずない=ある
だな

85 名前:70 mailto:sage [2012/02/28(火) 14:43:31.96 ]
俺のこと完全無視だけど、まじでこれを考えるのがプライオリティの最上位だから。
できるのかできないのか、やるのかやらないのか。
結局、全部Ctrl-C,Vでやるのが最速、ってことになるぞ。

86 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 16:16:27.89 ]
>>84
ですよね
ルールが業務の継続に支障を来すようでは本末転倒というもの

87 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 18:40:19.02 ]
278氏、コテハンにしておいて w

88 名前:278 mailto:sage [2012/02/28(火) 19:15:11.16 ]
ただ今夜勤中でスマホからなので書き込みできません
代行お願いしました
>>84↓は違います

>>84
失礼しました、過去一度だけあったようですが、もしまたあったら調整するようにします

>>85
大変失礼いたしました
どちらでしょうか…

89 名前:70 mailto:sage [2012/02/29(水) 16:08:54.12 ]
>>88
> どちらでしょうか…

何が「どちらでしょうか」なのかわからないけど、一番重要だけどわからないから考えることから逃げてないか?
実際にコード書くのなんかあとでいいよ。何をするかによって必要なデータもシート構成もかわるし。

> あとは条件を満たした振り分け

これやりたいの?やりたくないの?
やりたいなら、どのレベルで実現したいと思ってるの?

90 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 17:13:45.93 ]
>>44 の要件定義が見れない
>>18と278だけで作るのか?
それならメール等でやり取りしてろ
多くの人の意見が聞きたいなら要件定義位はスレに書けよ

91 名前:278 mailto:sage [2012/02/29(水) 19:25:00.78 ]
>>90
www.dotup.org/uploda/www.dotup.org2696403.txt.html
pass:vba
こちらになります

92 名前:278 mailto:sage [2012/02/29(水) 22:20:48.92 ]
>>89
振り分けが一番重要かなと考えています

93 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 13:32:59.78 ]
>>92
一番重要なら、なんで>>91の「【プログラム的に欲しいもの】」には入れてないの?

それを、程度は別にして自動化したいのなら、その実現には全開発時間の80〜90%位
かかるよ。

この自動化部分をこのスレの誰かに手伝って貰いたいなら、まずその部分の暗黙知を
形式知にしないと。



94 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 14:11:49.65 ]
>>91
せめてDropboxの公開リンクかなんかにしろよ。ロダとか、流れる前提じゃないか。

95 名前:278 mailto:sage [2012/03/01(木) 16:06:05.97 ]
>>93
すみません、勤務表をVBAで作る上で一番基本になることだと思っていたので書く必要は無いのかなと考えてました
具体的にどう形式知にするのがよいのでしょうか…


96 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 17:08:07.11 ]
>>95
横レスだが、自動化の範囲とか優先順位を考えといたほうがいいと思う。
例えば、

・最小限の自動化:
次月のラフな割り当て案をルールから自動で作成。
あとは手で調整。
ただし矛盾してる可能性のある部分は表示。(夜勤明け後が休みになっていない、とか)
矛盾部分の表示を見ながら人間が再度調整。
調整に行き詰ったら、割り当て案を再度自動作成(手で調整した部分は消える)。


・もう少し広範囲に自動化:
手で1箇所調整するたびに、関連する割り当て部分を自動変更。


・徹底自動化:
後日の予定外イベント(病欠、異動、役割変更など)への耐性が最大になるプランを自動的に選ぶ。
(カーナビの自動リルートみたいなものを想像)。
など。

まあ、ここまでするのは実際大変だから、最小限の自動化で運用して、足りない必須部分を後付け出来ればいいんだが。
後付け容易にする設計自体がノウハウだから、どこまでやるかの見極めは確かに難しいね。


97 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 17:39:00.34 ]
>>95
> すみません、勤務表をVBAで作る上で一番基本になることだと思っていたので書く必要は無いのかなと考えてまし

なんかそれ以外を一生懸命やってるから、やりたいのかどうなのかわかんなかったよ。

> 具体的にどう形式知にするのがよいのでしょうか…

とりあえず思いついた質問。

これまで作った勤務表は、全て【勤務表条件】を満たしているかどうか。
満たせなかったことがある場合は、どれを満たせなかったのか。
1ヶ月分の勤務表を作るのに必要な時間はどれくらいなのか(hourだよ)。
公開して問題ない過去の勤務表があれば、個人情報等を消して公開する。
従業員の満足度は、【勤務表条件】を満たしてさえいれば、どのようなものでも最高なのか。

次に、どうやって勤務表を作ってきたのか、その手順をざっくりと説明(200〜400文字程度)。
他人に「一から【勤務表条件】を満たすものできる?」と言ってもそりゃわからないよ。
自分はおよそこういう手順で作ってるんだけど、自動化できる?であれば、相談に乗る人も出てくるかも。

【勤務表条件】をもっと明確にする。
たとえば、
「早番はなるべく間を5日以上はあける」というのは、最悪連続しても良いのか。
「勤務がなるべく均等になるように振り分ける」の「均等」とはどういう状態か。

とかかな。

98 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 17:45:07.03 ]
>>96
> ・最小限の自動化:
> 次月のラフな割り当て案をルールから自動で作成。

実は「ラフな割り当て案」が一番難しいんだよ。
「ラフな割り当て案」=【勤務表条件】を100%満たしていない案ということだよね。

【勤務表条件】を100%満たせなければ、試行錯誤なりなんらかのアルゴリズムなりを適用して、
100%満たすものを作る、なら、実現方法は別にしてわかりやすい。

一部条件を満たしてなくて次に行くと、「早番はなるべく間を5日以上はあける」とかいう条件を
全然満たせなくなってくる。
満たせてないところを満たすよう修正すると、それ以降にも影響するでしょ?

だから、「マニュアルで修正可能なラフな割り当て案」というのはとても難しい。

99 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 17:50:14.05 ]
そうだ、これも質問に追加。

これまでに試したことのある自動勤務表生成ツールはあるか?
あるとしたら、それを採用できなかったのは何故か。

100 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 17:58:34.97 ]
>>98
>「ラフな割り当て案」=【勤務表条件】を100%満たしていない案ということだよね。

まあそのとおりなんで、最初から条件を全部適用するのは諦めて、実装しやすいところから出来ればいいんだが、という趣旨。
機能分離が簡単ではないのは承知。

101 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 18:14:13.36 ]
すでに、この問題についてスレを読み、考え、書き込み、コードを書いた人ののべ工数は300人時(=2人月)くらいいってそう。

102 名前:278 mailto:sage [2012/03/01(木) 18:33:53.26 ]
色々な意見ありがとうございます
>>99
これまでにツールを使ったことは無いです
単純に探してみて販売しているものがほとんどだったり、無料のものでも応用が利かない(自分の所では使用できない)ものだったからです

103 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 18:35:15.48 ]
>>101
面白い現象だよな。
直接のメリットは何もないはずなのに。

ジェーン・マゴニガル 「ゲームで築くより良い世界」
ttp://www.ted.com/talks/lang/ja/jane_mcgonigal_gaming_can_make_a_better_world.html

>World of Warcraftのようなゲームはプレーヤーに世界を救う手段を与え、ヒーローの行動様式を
身につけるよう動機づけます。もしこのゲーマーの力を、現実の世界の問題を解決するために使えたと
したらどうでしょう? ジェーン・マゴニガルはそれは可能だと言い、その方法を説明しています。





104 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 19:26:14.98 ]
>>102
>無料のものでも応用が利かない

>>91 のどれが出来なかった?

105 名前:278 mailto:sage [2012/03/01(木) 19:57:42.36 ]
>>97
>これまで作った勤務表は、全て【勤務表条件】を満たしているかどうか
今までで年に3,4回は満たせてない月だと思います
夜勤、明け、休みのあとにまた夜勤と続いてしまうことがありました

>ヶ月分の勤務表を作るのに必要な時間はどれくらいなのか
そのときの希望休の数や、うまくはまるかどうかで変わってきますが
大体8〜10時間(数時間*数日)かと思います

>従業員の満足度は、【勤務表条件】を満たしてさえいれば、どのようなものでも最高なのか
特に条件を満たしていなくても(夜勤が続いても)さほど文句はありません
逆に日勤(早番)が3日とか4日続いたあとの夜勤だったりすると少し不満(文句はないけど)があったりします
最高の出来、というのは今までなかなか無いと思います


106 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 20:09:06.54 ]
スコア方式の方が良さそうだな。

107 名前:278 mailto:sage [2012/03/01(木) 20:28:57.69 ]
>次に、どうやって勤務表を作ってきたのか、その手順をざっくりと説明(200〜400文字程度)。
1.まず希望休、希望勤務を入れる(コレは固定)
2.前の月の夜勤を見ながら、夜勤を適当に入れていく
3.日勤の2番を夜勤に気をつけながら入れていく
4.早番を↑に気をつけながら入れていく
(これ以降日勤はとりあえず空白を入れる。番号を振り分けるでなく、日勤としておく)
5.行事など人の多く必要なところを入れる
6.それ以外の日に日勤を割り振る
7.この時点でおかしいところや組めないところ、偏っているところがあれば
一部入れ替える、ダメそうなら全体にごっそり替える
8.日勤の番号を偏りないように入れていく
9.最終確認。
希望勤務を確認→夜勤、早番、日勤の回数を確認→一人一人偏りを確認
→日勤の番号の偏りを確認
10.完成
という手順です


108 名前:278 mailto:sage [2012/03/01(木) 20:35:14.05 ]
>>104
そもそも夜勤がなかったり、希望の勤務が入れれなかったり、可能・不可能な勤務が指定できないなどの理由からです

109 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 20:53:27.66 ]
まぁベタだがPCにのみできるアルゴリズム。
まず、どの状態が良いか、悪いかという評価式を用意する。
たとえば、連勤=-10、などなど。
後は、
1.絶対動かせない人をまず配置する。
2.比較的動かせない人を、その枠にそって(たとえば火・金は勤務可であれば、どちらかに)あてずっぽに配置する。
3.そっから、あてずっぽうで余った人を置いていく。
それを、2を数10回、さらにそれに対して3を数10回ずつやる。

その中で、一番スコアの高かった表が、比較的よいシフト表な。
明らかに悪い表しか出てこなかったら、スコアの評価式変えろ。
ファジィ()。

110 名前:デフォルトの名無しさん [2012/03/02(金) 01:08:27.99 ]

VISTA, excel2000,モニター24
左上に貼りついている表をずらしてなんとかしたいが表をずらせない
マクロ、怪しいボタン、関数、リンクすべて消してくれ
セルの結合、色、多すぎる枠の太い線みんなやめてくれ
278さんがVBAの達人と理解したから再度アップ頼む
ボタンは、コントロールボックスのコマンドボタンを使って
プロシージャコマンドボタンクリックからスタートすると本に書いてあった


111 名前:278 mailto:sage [2012/03/02(金) 02:05:31.15 ]
>>109
アルゴリズムはExcelでも出てくるものなんですね…
色々調べてみましたがかなり難しそうなので
教えていただいた手順を参考に試行錯誤を試してみたいと思います

112 名前:70 mailto:sage [2012/03/02(金) 11:17:19.83 ]
乱数を使って条件にあうものを設定していこうとか、順に組み合わせていってチェック
しようとかする方法は無理だから。

勤務の種類が10個で、従業員が10人いるとすると、1日分の組み合わせは10^10=10億通り。
これがどれくらいのものかというと、1日が10万秒だとして、1秒に1万通りのチェックが
できれば1日で終わる規模。

次の1日分を決めようとすると、さらに10億倍になる。つまり10億日=273万年。
30日分だと10^300通り。単純な順列組み合わせだと無理。

計算のスピードが10^4になっても、条件によって場合の数が10^150位にへったとしても、
10^20でさえ無理なんだから、もうとても無理。

113 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 12:01:27.24 ]
再帰も絞込みも禁止ならそのとおりだな。



114 名前:70 mailto:sage [2012/03/02(金) 12:40:11.81 ]
>>113
再帰や絞り込みを使っても無理だって。

10人30日で300マスあるものの200マスが一意に決まって、残りの勤務の候補が3個に絞られたとしても、
3^100でだいたい10^46通り。
順に試していく方式だと、大体10^10位のオーダーにならないと無理。

なので、>>107のやり方をサポートする機能を実装するか、GA等を使って劇的に計算量を減らすか、
あるいは「ラフな割り当て案」を作れるとしたら、それを作るロジックを考えるのどれかしかないと思う。

115 名前:70 mailto:sage [2012/03/02(金) 12:49:13.89 ]
勤務表の難しいところは、29日分まで完全にできても、残り1日分で詰んだら終わりって所。
では、どこかとどこかを入れ替えることによって残りを埋められる状態にしようとすると、
まずどれが入れ替えられるのかを探すのが大変。
結局普通にやれば、「順に試す方式」になってしまう。

かといって、残り1日分はマニュアルでやってね、ということにして良いかどうかが微妙。
実際にやればわかるけど、あちらを建てればこちらがたたず状態が続くだけになりがち。

ただ今回は、多少条件に合致しなくても、従業員が受け入れてくれるようなので、それが救いかな。

116 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 12:55:07.17 ]
既存のパッケージはボッタクリ、まで読んだ。

117 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 13:05:07.84 ]
>>111
大事な所を数ヶ所ぼかしてるが、これだけでもそれなりにいい表作ってくれるぞ。

118 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 13:08:12.51 ]
>>114
ちょっとだけ言っとくと、常に全部のスコアは覚えなくていい。最高の表を覚えとく。
作成中に明らかに挽回不能なスコアになった時点でその表は破棄。
順に試すなよ。あくまでランダムだ。
一番マシな適当な表だよ。

119 名前:70 mailto:sage [2012/03/02(金) 13:44:24.32 ]
>>109のようなやり方なら、乱数もいいかもしれないけど、日付順・人順に決めていく方式だと、
もうその方式自体が「順に決める」になっているので、あとは乱数を使っても使わなくても
たいした違いはないよ。

>>109はGA的なアルゴリズムで、確かにこれなら出来そうな気がしなくもない。
ちなみに、ちょろっと試そうかと思ったけど、>>90の要件読んでも早番が何人で夜勤が何人なのか
わからなかったので詰み。

120 名前:70 mailto:sage [2012/03/02(金) 13:47:29.97 ]
勤務表は一ヶ月に一回作ればいいから、>>109で導き出したスコアの良いものTop10を残しつつ、
29日ずっと動かし続けて、30日目にそのTop10から良いものを選んで修正するというのもありかな。

121 名前:278 mailto:sage [2012/03/02(金) 14:11:49.91 ]
様々な意見ありがとうございます
1日の組み合わせが10億通りとか273万年とか数字で表されると無理なんだってはっきりしますね…
結局どう進めていくのがいいんでしょうか;

>>119
順に決めるなら乱数は使わなくてもそんなに違わないんですね
早番は1人、夜勤1が1人、夜勤2が1人です


122 名前:70 mailto:sage [2012/03/02(金) 14:44:34.91 ]
>>121
月〜日の日勤者数を(8, 8, 7, 8, 8, 6, 5)に決めうちにしたとして、例えば月曜の組み合わせの数は
早番*日勤*夜勤1*夜勤2=16C1*15C8*7C1*6C1=4,324,320
と計算できる。
400万だから10億と比べるとかなり減った気がするが、1ヶ月分だと400万の30乗で約10^198通りなので、
順番に決めていく方式はやはり無理。

ちなみに、なんで組み合わせの数を計算しているかというと、実際にコードを書いて試す価値があるか
どうかを決定するため。
順番に決めていく方式は、どんなに上手くやってもまぁ無理。

123 名前:278 mailto:sage [2012/03/02(金) 15:09:13.63 ]
>>122
やっぱり順番にというのは無理があるんですね…
アルゴリズムを使って最良の表を考えるというのが一番なのでしょうか



124 名前:70 mailto:sage [2012/03/02(金) 15:51:40.71 ]
ひょっとして、誰かが自主的にコード書いてくれるのを待ってたりするの?
念のため言っとくけど、俺は書かないから。

暇つぶしに、ローカルで>>190の方式で実現可能性を見いだせるかどうかのテストコードを書いたりは
するかもしれないけど。

125 名前:278 mailto:sage [2012/03/02(金) 20:02:32.62 ]
>>124
そこまでは思ってないですが、自分だけでは難しいなと…
皆さんが協力してくださるおかげでここまで来られてる状況ですから

テストコードでも見せていただけたらとても参考になると思います

126 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 23:41:42.27 ]
>>109だが、やっとホテル帰ったから要件見ようとしたらまた流れてた。

>>119
出来そうな気というか、これに味付けしたものが売り物になってるからな。ソリューションとしてだが。
実際には特許ものの刈り込みとか、数学的・統計学的な式を使った任意の離散的だが偏りを持たせた2・3とか使ってるが。

127 名前:278 mailto:sage [2012/03/03(土) 00:06:14.75 ]
>>126
流れるのそんなに早かったですかね…
やっぱり別の方法で上げておいたほうがいいのかな
www.dotup.org/uploda/www.dotup.org2704876.txt.html
pass:vba

そこまで素晴らしいものは到底作れないですね;

128 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 00:19:57.36 ]
トン。明日待機とかの暇な時間に見てみる。

129 名前:デフォルトの名無しさん [2012/03/04(日) 01:27:23.78 ]
>ひょっとして、誰かが自主的にコード書いてくれるのを待ってたりするの?
雑談しながら何もしないで待っているように感じる
データと条件を整理して常にUPしなければ無理と思うが
おもしろそーだから俺も待っている

>・各人の勤務ごとの月の合計(休、日、夜、明、休、有、研)を表示させたい
データを見て休の意味がわからない、日曜日は会社によって月曜日もあるが
休 日曜日、変更できる
休 日曜日、各人指定なので変更不可
休 研修なので変更不可
休 会社or法律による強制休日、変更不可
休 有給、変更不可
休 会社都合による有給、変更できる

win98.excel95でナンバーズを総当たりで解いたら
7分ぐらいかかった、上級者のコードを見たいので興味がある

130 名前:109 mailto:sage [2012/03/04(日) 01:49:33.92 ]
今日地味に組んでみたが、VBAくそ遅い。VB6と変わらんやろと思ってたが、明らかに遅い。
最終的にbookが壊れたが、死ぬほど遅いが、ちょっと成果書いとく。

要件定義が甘いので、あてにしない。
各個人に、マスタとしてシートを定義する。
そのシートは、一月分の、
「入れない場所、絶対入る場所」を定義する。
横軸か日付、縦軸が勤務帯。朝、昼2〜昼10、夜1,2,研修、休み。
休み、研修は予め、全員を「勤務不可」とする。その上で、勤務可のみマーク。
一発目、そのマスタを読んで、全体としての、シフト番号1〜31x枠数(シフト枠n)に対する選択肢を決める。誰かの「絶対入る場所」にあたった枠は、他の選択肢を外す。
これから、ランダムで当て込んでいく。なお、一日に同じ人が働く事はないものとして、この時点で刈り込む。

一週間分を先ず決める。その一週間を基準に、個々人人に対して、一つ前のシフト枠に対して評価式のうち致命的ではないもののみ、ランダムで当て込んでいく。
ここでタイムアップ。お仕事してました。

131 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 01:51:39.38 ]
>>130
コード上げろ

132 名前:109 mailto:sage [2012/03/04(日) 04:10:28.65 ]
>>131
すまん。早めにそういう類のサイトにアクセスできる環境に行くわ。
DropboxもFWに蹴られるんよね。

133 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 09:17:39.57 ]
>>130
えっ? ダメだったの?
全然試しもしないで
できるって言い張ってたのかよ
くそ迷惑な奴だなw



134 名前:278 mailto:sage [2012/03/04(日) 13:43:23.03 ]
>>130
そんなに遅いものなんですね…
でもそこまで色々と出てくるとは;
どんなものか見られるの期待してます

135 名前:109 mailto:sage [2012/03/04(日) 13:59:27.36 ]
>>133
うん、すまん!
.netなら多少早かったが、反則よね。

136 名前:70 mailto:sage [2012/03/05(月) 14:59:33.88 ]
月に休みが10日程度ということなんだが、望ましい休みのパターンはどのような感じなんだろう。
それから勤務日と休日の割り振りはどんか感じが望ましいんだろう。

例えば、基本は2勤1休でその3日の繰り返しが良いとか、
基本は4勤2休でその繰り返しが良いとか、
休日は完全にばらばらの方が望ましいとか、
そういう基本的な理念がわからない。

>>109
セルを頻繁に更新してない?
Excelの機能が要らないんだったら、メモリ上であれこれした方が速いよ。
Excelの機能が必要だとしても、遅くて使い物にならないのなら、メモリ上であれこれする必要がある。

137 名前:70 mailto:sage [2012/03/05(月) 15:01:27.02 ]
そうだ、有休の話が出てこないんだが、有休(やそれに類する休み)の扱いはどうなってるの?

138 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 17:45:39.21 ]
>>130
なぁそれ本当に現実味があんの?
評価式さらしてみ?

139 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 17:48:27.21 ]
>>136
普通は、あるリズムで繰り返されるのがベターだとは思うが、>>278の所はどうなんだろうねぇ

140 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 20:00:11.04 ]
見たところ、やはり70さんが技術、経験ともに上級者といった感じだ。
短いテストコードでもいいし、過去に書かれたコードの一部でもいいので、ぜひ見せてください。
とても勉強になると思うので、よろしくお願いします。

141 名前:278 mailto:sage [2012/03/05(月) 20:17:50.77 ]
>>136
休みは大体仕事の間に一日、たまに2連休(月1〜3回程度)、稀に3連休(数ヶ月に1回)
理想としては月に2回前後連休、残りの休みは1日休みで振り分ける感じです
ただ希望休などで連休が多かったり(滅多に無いけど4回とか)逆に連休がない月もあります

>>70
扱い…例えば月10回の休み+有給です
他に何と説明したらいいか;

>>139
あんまりリズムとかないと思います。希望休を皆自分勝手に入れるので…

>>140
同意。見せていただきたいです

142 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 03:26:59.13 ]
元スレの329=331(システム要件書 ドラフトを書いた者)だが、規制が来て書けなくなってる間に仕事が忙しくなってしまった。

で、自動化の方向性とか、その辺について書いてみようと思う。
(忙しくなってからはレス読めてないので現状はよくわからんが、役に立つことを祈る。)
その前に・・・278氏、トリップ付けるなり、別名付けるなりしないと、このスレの278なのか依頼人の278氏なのか分からなくなるぞ。

自動化の方向性だが、
・1項目づつ決定して行く(しかないよなぁ・・・。)
・条件に合う候補が無くならずに月末まで埋まればよい
・条件に合う候補が途中でなくなったら最初からやり直し(たとえば夜勤連続じゃないと埋まらないとか。)

1項目づつ決定する方法
・スタッフ全員に対して、その項目に対する適正度合を得点化する。
 (資格があれば+50、前回勤務と重複してなければ+1、ペア勤務不適格者は-1、無資格なら-2000、既に入力されてる人は-1000とか。)
 (全条件に対して評価の重み付けをする必要がある。上記は適当に作った例なので、実際の状況に合わせて練り直す必要あり。)
・同じ点数の人については乱数で順位付けする(やり直し時に同じ結果になりにくいように。)
 (乱数を別項目にするか、得点を10倍とかして、1ケタ乱数を足しこむか・・・)
・得点1位のスタッフを項目に当てはめる
 (基準点数を決めて、1位の得点がそれ以下の場合は条件に合う候補なしでやり直し。)
 (手動入力の場合はコンボに得点の高い順にスタッフを並べればいい。)

時間が出来たらコードも書いてみようと思うが、今の所デスマ中なので期待しないでほしい。

143 名前:顕正新聞 平成24年2月5日号「原発全廃特集号」 mailto:sage [2012/03/06(火) 09:43:21.26 ]

・原発は日本を滅ぼす、即時全廃せよ

・六ヶ所村再処理工場直下に二つの活断層

・耐震基準450ガルと、著しく耐震性に欠ける施設

・大事故が起きたらチェルノブイリを遥かに越す未曽有の大惨事が

・代替は天然ガス・コンバインドサイクルで十分

d.hatena.ne.jp/kensho01/20120208/1328718592



144 名前:56 mailto:sage [2012/03/06(火) 11:45:00.24 ]
流れはこんな感じで良いのかな?
@入力シートで行事日、各人毎の希望休み、研修日を設定し確定
A1〜2日迄の明け、夜勤休みを自動設定して希望勤務詳細シートに内容をコピーしシート画面に移る
此処で更にシフト毎の出来ないパターン(日勤、夜勤、早番の三種類)を設定
B入力シートに戻して指定日(通常は1日から)希望勤務詳細シート、従業員相関シート(能力定義も此処で)曜日別人数表(最低)を元に最低人数分を自動振り分け
・行事日は曜日別人数に+2名自動追加
・振り分けで余った分はマニュアルで振り分けする

145 名前:278 Excel2000使い mailto:sage [2012/03/06(火) 12:29:34.02 ]
>>142
>その前に・・・278氏、トリップ付けるなり、別名付けるなりしないと、このスレの278なのか依頼人の278氏なのか分からなくなるぞ。
そうですね…名前は改めました

>・1項目づつ決定して行く
これは1日ずつってことでしょうか?それとも早番、夜勤…といった感じ?

得点化というのは前に出ていたアルゴリズムと同じようになるのでしょうか
それとも手順(コード?)は全然別なのかな…

>>144
流れはそんな感じですね
行事日の設定は日を設定かその日の日勤者数を設定するとどっちが早いのかな
最悪勤務指定で必要人数分の職員を適当に選んで日勤希望にしておくのがいいかと思ってたけど余計時間かかるようになっちゃうかな
行事日は+2名で足りない可能性があります







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<129KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef