1read 100read
2012年3月プログラム134: ExcelVBAで勤務表を作ろう (272) TOP カテ一覧 スレ一覧 2ch元 削除依頼
NetBeans Part6 (694)
C++相談室 part94 (456)
Visual Studio 2005 Part 27 (113)
C++相談室 part94 (456)
Coqスレ (138)
文字コード総合スレ part7 (606)

ExcelVBAで勤務表を作ろう


1 :12/02/21
Excel VBA 質問スレ Part23からの移動
Excel VBA で勤務表を作るスレです
Excel VBA 質問スレ Part23
http://toro.2ch.net/test/read.cgi/tech/1327763113/

2 :12/02/21
これまでの流れ1
278 名前: デフォルトの名無しさん [sage] 投稿日: 2012/02/19(日) 11:10:34.97
今特別養護老人ホームに勤めていて、頭を使って手書きで勤務表を作っています
ExcelのVBAで自動で勤務を割り振ってくれる勤務表は作れますか?
320 名前: 278 [sage] 投稿日: 2012/02/20(月) 22:29:35.78
説明難しいですね…
早番=1番と考えていただければいいです
平日7番までというのは日勤者(2番〜7番の6人)です
今現在は正職が13人、嘱託が1人、パート2人、(関係ないけどお掃除さん1人)
ただ3月で正職と嘱託が1人ずつやめます
パスは vba です
これは勤務表
http://www.dotup.org/uploda/www.dotup.org2664409.jpg.html
勤務表の一番右になります
http://www.dotup.org/uploda/www.dotup.org2664415.jpg.html
これが当番表になります。
実際作りたいのはこっちで考えています
http://www.dotup.org/uploda/www.dotup.org2664419.jpg.html

3 :12/02/21
これまでの流れ2
329 名前: デフォルトの名無しさん [sage] 投稿日: 2012/02/20(月) 23:43:30.36
278番様向け 勤務シフト表入力支援システム要件書 (ドラフト2)
1.職員の種類
 正職、パート、嘱託などがあり。
 人によって可能な「勤務」に違いがある。(パートは日勤3番以降※のみ。)
 ※ 人によっては日勤4番や5番しかできない。
2.勤務の種類
 早番、日勤(2番〜10番)、夜勤1、夜勤2、明け、休み、有給、研修などがある。
 同じ種類・番号の勤務(および休み)はなるべく連続しないように。偏りのないように。
 最低限必要な1日の勤務人数は
 早番、日勤(2番〜5番)、夜勤1、夜勤2、明け、明け、休み、休み
 の11名。(休み2名は前々日の夜勤1、夜勤2。強制。)
3.早番
 別名1番。
4.日勤
 2番、3番・・・と(行事などの日)10番ぐらいまである
 平日は大体6番、7番以上まで欲しい(希望休が重なるなどで5番までのこともあり)
 土曜、日曜日は4番、5番までなど少ないことが多い
つづく

4 :12/02/21
これまでの流れ3
330 名前: デフォルトの名無しさん [sage] 投稿日: 2012/02/20(月) 23:44:17.04
つづき
5.夜勤
 夜勤ではペアを組ませられない組み合わせがある。
 夜勤は基本連続しないように(夜勤、明け、休み、夜勤…可能な限りにならないよう…)
 前の月の夜勤の明け、明け休みも考慮する
6.明け
 夜勤の翌日は自動的に入る。
7.休み
 正職、嘱託の休みは基本月10回。
 月により前後することがある。(1年間の回数は決まっており、兼ね合いで調整。)
 パートは人によって回数が違う。
 パートには休みを全部自分で指定する人もいたり。
 夜勤の翌々日は自動的に入る。
8.研修
 出張による研修。多くても月1回1名程度。
9.有給
 有給休暇。

5 :12/02/21
このスレッドは天才pンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
                  京都大学霊長類研究所

6 :12/02/21
ソフトハウスに頼めば5,6人月はかかるものを作って貰う乞食スレ。

7 :12/02/21
Q1: 例えば三日ローテーションの場合(一人一ヶ月10ブロックに分けて考える場合)、一人目にどの勤務パターンを
設定するかのロジックを考えろ。
Q2: 一人目の勤務パターンを決定後、二人目の一ブロックの決定ロジックを考えろ
Q3: 以降、三人目・・・n人目と決定していき、全員分を決定する前に破綻したときのやり直し方法を考えろ
まずこれができないと、三日分の勤務ローテも組めない

8 :12/02/21
ランダムに勤務を設定していく場合、Rnd関数を使って乱数を出していく方法くらいしか思い浮かばないのですが
これだと毎回それぞれに乱数を出さなくてはいけないしかなり処理がきつくなりますよね・・・
他にランダム性を持たせる方法ってあるのでしょうか?

9 :12/02/21
きつくならないからそれでやれよ

10 :12/02/21
いつまでも自動生成の方ばっかり追いかけるなよ。
ひとまずは入力支援を完成させることを考えろ。
そうしないと役に立たない表しか生成できない屑プログラムしかできないぞ。
自動生成の「条件に合致しているかどうか判定する部分」が
入力支援の主たる部分なんだから、そっから先に作る方法を考えろ。

11 :12/02/21
そうですね、とりあえずは以前言われた
1.条件に合わないモノを検出する機能
2.一意で決まるモノを自動入力する機能(夜勤→明け→休み)
3.コンボボックスによる候補での入力(条件によってソートする。)
こちらを考えていきます

12 :12/02/21
その3つが実は自動化に重要。
1.条件に合わないものを検出する機能
 → 自動化時に自動選択した項目が条件に合うかチェックするロジック
2.一意で決まるモノを自動入力する機能
 → ここですでに半自動化
3.コンボボックスによる候補での入力(条件によってソートする。)
 → 条件により近い候補を絞り込める = 自動化時の候補絞り込みに有効
コンボに入れる候補で、条件に一番近いものから1人を(ランダムで)選んで入れれば、自動化の入力ロジックになる。

13 :12/02/21
まずは、「そこ」に入れてはいけない人の条件を考えよう。
「休み」に入れていけない人・・・なし
「早番」に入れていけない人・・・
 「当日の他の項目ですでに入力されている」
 「前日が早番」
 「前日が夜勤1」
 「前日が夜勤2」
 「前日が明け」
こんな感じで・・・。

14 :12/02/21
「早番」に入れていけない人
 「当日の他の項目ですでに入力されている」
 「1〜5日前が早番」
 「前日が夜勤1、夜勤2、明け」
「2番〜10番」に入れていけない人(入れないほうが良い人)
 「当日の他の項目ですでに入力されている」
 「前日が同じ番号」
「夜勤」に入れていけない人
 「当日の他の項目ですでに入力されている」
 「3日前が夜勤1、夜勤2」
これくらいかな?

15 :12/02/21
ふと思ったのですが条件に合わないものを検出する機能というのは
あらかじめ手入力で勤務表を作ったうえでおかしいところを探す
というものであっているでしょうか?

16 :12/02/22
>>14
なしの項目も忘れずにね。
あと「明け」は当たり前な事ばかりかもしれないけど一応書いておいた方がいい。
誰かがメンテナンスする時に困らないように。
夜勤の条件に
 「翌日が明け以外で入力済み」
 「翌々日が休み以外で入力済み」
があるんじゃないかな?
休みとか研修をあらかじめ入力してる場合、チェック対象になるよね?
全体をブラッシュアップして仕様書としてまとめとくといいよ。
仕様書、システム要件書共に自分で管理するようにね。
あと、各条件について必須条件か努力目標か分かるようになんか方法考えて資料にしてみるといい。

17 :12/02/22
>>15
うん。
基本的には 「指定したセル」のデータが条件に合致してるかチェックする を入力済みセル分実行することになる。
それ以外の方法で実装すると、自動化の際にプログラムが今から入力しようとするセルが妥当かチェックするのに使えない。
-----
入力画面について・・・
イメージは湧いてきたかな?
前月末から5日前までのデータのコピーも入力画面に入るようにするといいと思う。
なにせ、早番の条件に5日前のチェックがあるんだし・・・。
あと翌月初2日分も、休みの予約が入力できるようにして、チェック対象(チェックの比較対象)にすると良い。

18 :12/02/22
とりあえず現状報告
http://www.dotup.org/uploda/www.dotup.org2669392.zip.html
pass: vba
xlsmファイルです。拡張子を書き変えてください
勤務番決定シートでテストをしている段階
忙しいので続きはしばらくできそうにない
気長に…

19 :12/02/22
>>18
余計なお世話かもしれないが
このファイルってスタッフの実名使ってない?
架空の名前なら問題ないけど、もし実名なら適当な仮名に
(むしろスタッフAとかスタッフ1とか抽象的なもの)
差し替えたほうが良いんでないかい?
もちろん名前出したって実害ないかもしれないが、
「ネット上に名前を出されること自体が嫌」って人も居るだろうしね。

20 :12/02/22
なにこの私的なスレ

21 :12/02/22
>>18
何でだろ・・・拡張子.xlsmに変えてもちゃんとならない
自分の現状…
http://www.dotup.org/uploda/www.dotup.org2669879.rar.html
pass:vba
>>18さんの見ると自分が全然進んでないのがわかる;

22 :12/02/22
失礼しました
Excelのバージョンが2000のままでした

23 :12/02/23
ちょっと疲れて頭が回ってないので簡単な見落としな気もするのですが
Sub hayakakunin()
For c = 5 To 34
For d = 3 To 38
If Cells(c, d) = "早" Then
For e = 1 To 5
If Cells(c, d + e) = "早" Then
Cells(c, d + e).Interior.ColorIndex = 10
Else
Next
Else
Next
Next
End Sub
これだとNextに対するForがありませんと出ます
どこがおかしいのでしょうか?

24 :12/02/23
原因は必ずしもFor Nextにあるわけじゃないよ
if then に対応する End if が無いときにもそういうエラーになる
(今回はそれが原因)
あと、For Next をネスト(入れ子)するなら
Next にも対応する変数を書いておくと間違いが分かりやすい。
Sub hayakakunin()
For c = 5 To 34
For d = 3 To 38
If Cells(c, d) = "早" Then
For e = 1 To 5
If Cells(c, d + e) = "早" Then
Cells(c, d + e).Interior.ColorIndex = 10
Else
end if
Next e
Else
end if
Next d
Next c
End Sub

25 :12/02/23
End ifが入ってなかったからだったんですね…
全然気づかなかったです
ありがとうございます

26 :12/02/23
>>21
こりゃ1年かかっても無理だろうな

27 :12/02/23
これってよくあるんだけど、製品で売るぐらいのものなんだよね。
うちもナースの勤務表を作成/管理/運営するシステム作ってるが、
結構なお値段するし、それに見合った計算してる。
「Excelの勤務表」程度の言葉でごまかすのもなー。

28 :12/02/23
Excelでコピペを駆使して入力して、シフト種別毎の集計とかを自動計算するシートを作るだけでいいような気がする。

29 :12/02/23
基本ルールで自動配置したものを、人手で調整(ルール化しにくいもの、予定外イベントへの対応、クレーム対応)くらいならよく作るけどな。
逆に、特定職場のルールを全部プログラムしたら使い回しが効かない。

30 :12/02/23
>>29
自分の職場専用のものを作ろうとしてるみたいだから、使い回しがきかなくても良いのでは?

31 :12/02/23
Excelの勤務表程度をぼったくり価格で売りつけてるのがIT業界

32 :12/02/23
それじゃ278が求めてるもの作って安く売ってやりゃいいよ。
使えるものなら買ってくれるだろ

33 :12/02/23
>>31
っていうけど、本当に面倒なんだぞ。
一人シフト変更願い出したら、3人に波及して、さらに3人ずつに波及して、と、
全体が書き変わったりする事もあるし、逆に絶対動かせない人も居るし、
こいつとこいつは混ぜるな危険があったり、こいつは夜入れないけど、
x時間は確保して。とか、一歩判定条件間違えたら無限ループに入っちゃう。
ダイヤ変更プログラムなんかでもそうだけど。
でもまぁ各社ノウハウがあるから、そのノウハウを売ってるんだよ。

34 :12/02/23
>>31
ぼったくり価格でも売れるんだから、キミも作ってそのぼったくり価格の80%くらいで売れば大もうけ出来るんじゃない?

35 :12/02/23
ExcelはReactive Programingなんだが、手続き型言語みたいにパッケージ作ると確かに悲惨な事になるな。

36 :12/02/23
頑張って一ヶ月くらいで作りたいですね…
製品として売っているものは本当に高いですよね
何万も出せないし、使いまわせなくても問題ないですし…
頑張って作っていくしかないですね

37 :12/02/23
1人月!?

38 :12/02/23
なんでエクセルにこだわってんの?
他言語ならもっと楽にできるだろ

39 :12/02/23
自社のガソリンスタンド向けローテーション表(1店舗当たり7名までを手入力、勤務報告書作成機能付き)を作った時は半年位(業務外時間を利用して)かかったなあ

40 :12/02/23
>>36
ひとけた万円で買えると思ってんの?
ってか、自分の時間単価とかかった時間掛けて、購入金額より高くなるようだったら、
早めに買った方が経済的だよ。それしか仕事無いんなら別だけど。

41 :12/02/23
他言語の方が楽だったんですね…
半年?!ちょっと甘く考えすぎてました;;

42 :12/02/23
>>41
1年くらいはみましょう
私がときどき(息抜き程度に)作業して
2ちゃんにアクセスできるときに
続きをアップロードします
278さんにお願いしたいのは、
要件を文書にしてもらうことです
私の理解では今のところ日勤はどれも
同じと思っています
勤務表の映像では日勤は同じ空欄になって
いるようでしたので。
仮に職員がAさんからPさんまでいるとして
それぞれ一人ずつの職員の条件も
書くようにしてください
文書に書かれていることをすべて満たせば
完成といってもいいくらいにお願いします
掲示板に書ける分量にはならないので、
要件の文書もどこかにアップロードしてください

43 :12/02/23
気長に頑張ります
日勤は番号によって仕事内容が違い、曜日によっても少し違います
それも要件に書いておきます
勤務表は早番、日勤、夜勤、休み、有給、研修などを決めます
当番表が勤務表を元に番号を割り振っていきます。実際に作りたいのはこちらの当番表になります
条件など書き記してもう少ししたらアップします

44 :12/02/24
要件の文書アップしました
http://www.dotup.org/uploda/www.dotup.org2676715.txt.html
pass:vba
多分これくらいだと思いますが…
分からないところがあったら言ってください

45 :12/02/24
1日何時間やって半年とか1年とか言ってるんだろう?
最低で1,000時間、満足できる自動処理ができるものは、2,000〜3,000時間かかると思うぞ。

46 :12/02/24
仕事の内容をまとめるとこんな感じか
チーフ業務…主任、副主任が担当
事務処理…主任以下4名程
記録係…正職員のみ(但し中級以上)
見守り…中級以上?
各種介助
雑務、清掃
組合せのパターンでいうと夜勤の主任、副主任のペアも駄目だし、どちらかが明け、休み、出張の場合片方が日勤A〜が望ましい
また新人の場合も数ヶ月間は日勤扱いのみになるのでわ?

47 :12/02/24
だいたい今手で計算してる事をそのままコードにするだけなんだから時間割作成者が書けば余裕だろ。

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

49 :12/02/24
新たな主任が別の部署から移動で配属される可能性は有る?

50 :12/02/24
>>46
副主任が主任に、平社員か他部署から来る人が副主任になると思われます
でもあんまり主任とか関係ないかな

51 :12/02/24
>>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 :12/02/24
とりあえず・・・
>それから、早番が5日以内にあればセルの背景を赤にする、
>とかいうことは、条件付き書式で実現したほうが良いと思います
これを試してみようと思ったのですがうまくできませんでした
(セルH5で)=OR(C5="早",D5="早",E5="早",F5="早",G5="早")
これに加えて「H5セルも早番の場合」を付け加えるのがうまくいきません

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

54 :12/02/25
>>52
そこにAND条件を加えればいいだけです
私はMATCHをつかって
=AND(自己セル="早",MATCH(自己セル,自己セルの5コ左:自己セル)<6)
のようにしました
>53
勤務表に直接指定の勤務や休日を入力します
必要人数は18のように処理します
勤務表で指定の勤務を変えたり、その日の必要人数を変えたり
乱数の種を変えたりして、いろいろ試しながら作成するわけです
勤務表の形式の、縦が職員名で横に日付があり、セルに勤務番号
から、
当番表の形式、縦が日付で横に勤務番号があり、セルに職員名
へと変換するわけです

55 :12/02/25
>>54
ANDを使ってできました
夜勤の次が明け、休みになっているかや夜勤の3日前が夜勤じゃないかも
同じように条件付き書式でやったほうがいいですかね
ただこれ全部のセルに一つ一つやるのは大変だ…
今使ってる当番表及び勤務表と同じように作っていただけているんですね…
ありがとうございます
勤務表→当番表に変換するように作っていきたいと思います

56 :12/02/25
>>54じゃないので…
オートフィルで横は31日まで縦はメンバーの最後まで引っ張れば条件付き書式も展開されない?

57 :12/02/25
>>55
条件付き書式については
私は範囲選択してから入力しています
条件付き書式のルールの管理であとから修正することも
あります
進捗は、まだ18以降作業していません
ただ、実務で使う書式は「なるべく」変えない方がいいとは思っています
あと、
1年後の運用を仮定して、実行環境と278さんの開発環境を教えてください
私は、主にVistaでExcel2007、サブに7でExcel2010を使います

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

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

60 :12/02/27
テスト的に職員データ管理用のブックを作成中
http://www.dotup.org/uploda/www.dotup.org2686872.xls.html
pass:vba
現在の実装済みの機能は、
職員情報シートからの読み込みのみです
プロシージャshowUserform_staffData()を実行し、
職員選択のコンボボックスで読み込む職員を選択します

61 :12/02/27
一息入れると
>>60のユーザーフォームに
職員データの削除ボタンと
夜勤の組めない職員の解除のボタンが
ないことに気付きました
また、
278さんの要件の文書に書かれているものや
まだ書かれていない潜在的なものを含めて
要件を満たすために
このデータで十分なのかどうか分かりません

62 :12/02/27
全然協力しようなんて思ってないけど、コード見た感想言うよ。
・情報を保存する場合は、以後どう使うかを考えてシートを分ける
 個人的には、データを正規化しといた方がいいんじゃないかという予感。
 全体を一覧して見るページが必要なら、それはそういうページを別途作る。
・空行を入れない
 空行を入れるとoffset(0, 1)とか"+1"とか"-1"とか、本質的では無い位置指定がコードのあちこちに出てくるからね。
・悪いけど、コード読む気しない
 引き継げないよ?

63 :12/02/27
あと、やっぱ>>51の7〜9と10の実現方法を先に考えた方が良くない?
UIなんて後付けでいいよ。実現の目処が立たなきゃ、苦労して作ったUIも無駄になるよ。
7〜9でどれくらいの満足度のものを作るのかわからないけど、単純に組み合わせると10の数十乗のオーダーに
なるもののどれを10の候補とするのか考えなきゃ。
もうちょっと想像を進めれば、とてもじゃないけど例えば10通りの候補を選び出すのは大変で、
10通りに絞れたとしても、それが理想に近いか目で見て判断するの難しいよ?
15人*30日の450マスに理想と全然違うぐちゃぐちゃの10枚のどれがいいかなんて選べる?

64 :12/02/27
そうそう忘れてた。
セル領域には名前を付けることが出来て、Range()はその名前を引数に指定できるから。
範囲に名前を付けてもいいし、データの塊の左上1セルに名前を付けてもいいよ。

65 :12/02/27
>>62
それ以前にリアル業務が頭数足りないのは明白なんだからルール変更は普通にあるだろうな
業務体制を根本から見直す必要があるかも

66 :12/02/27
>>65
あ、そうなの?
詳しく読んでないから知らなかった。

67 :12/02/27
>>60
遅くなりました
職員情報管理すごくよくできていると思いました
データとして十分な気はします
あとは条件を満たした振り分けがうまくできるかどうかですが…
>>61
とても細かく指摘していただいてありがとうございます
自分だとそういったところに全然気づかないのでとてもありがたいです
ルール変更は多分ないと思います
人数最低限で何とか進めるしかないのかと…

68 :12/02/27
>>67
> 職員情報管理すごくよくできていると思いました
> データとして十分な気はします
それマジで言ってんの?
人の増減とかがあったらどうすんの?
同じ名字の人がいたらどうすんの?
コード読めた?
ダイアログださいだろ。
つか、最初のシートに手入力が一番速くね?

69 :12/02/27
絶対不可侵だと思いこんでいたルールであっても
相談あるいは交渉によってあっさり変更されてしまったりするのが
現実世界の理不尽さというか面白さだと思うんだ
一人で思い詰めてもよくないよ

70 :12/02/27
>>67
> あとは条件を満たした振り分けがうまくできるかどうかですが…
なんかここ自動化できそうだとか思ってない?
まず無理だから。

71 :12/02/27
>>60
マスタデータと、計算途中の値を保存する領域と、勤務表が確定した後のデータをごっちゃにしてるのが致命的。

72 :12/02/27
>11日勤の番号の入った勤務表を当番表に変換する
もっと簡単な方法があるのかもしれませんが一応できました
http://www.dotup.org/uploda/www.dotup.org2689511.rar.html
pass:vba
細かいところがなかなかうまくいかないです…

73 :12/02/27
>>72
お疲れ様です
処理方法は変えていませんが、
・Option Explicit をつける
・Select Case を使う
・当番と職員名は変数にする
など変更してみました
http://www.dotup.org/uploda/www.dotup.org2689961.xls.html
pass:vba

74 :12/02/28
>>73
少し変えただけでだいぶ見やすくなりますね…
大好きなIfにとらわれずCaseも使っていくようにしなくては;
Option Explicitチェック入れ忘れてました、失礼しました
大変勉強不足で申し訳ないのですがCLngの長整数型に変換するというのはどういった使い方になるのでしょうか?
.Cells(h - 5, CLng(Right(touban, 1)) + 13) = staff
の辺りなどなぜこうできるのか分からなくて…

75 :12/02/28
>>74
(あまり本質的なところではないと思いますが、)
"夜1"や"夜2"という文字列の右から1の長さの
文字列を切り出して("1"や"2")
それを数値に変換して13(マジックナンバーですが)
を足して当番表の該当列に合わせています
私はLongはVBAでは長整数型というより標準的な整数型として
使っています(4バイトの整数型という意味で)
明示的に数値に変換しなくてもVBAでOKかも知れません
自分が分かりやすいように

76 :12/02/28
そこはvalの方がいいんじゃないか?
あくまで文字列を数値として解釈したいんだろ?
ってか、そこを含めて勤務帯マスタにしとけよ…マスタってなんなんだよ…

77 :12/02/28
>>73
またまた無責任なコメント言うよ。
・range.currentregion.rows.countとかrange.currentregion.cols.countとか使おうよ
・基本的にselect必要無いから

78 :12/02/28
>>75
そんな方法があったんですね、知りませんでした
Longもそんなふうに使えるとは…
ありがとうございます

79 :12/02/28
他の人が言っているようにルール変更の危惧大ありなんだよなあ
とはいっても主任は夜勤禁止とかぐらいだろうけどメンバーがごっそり移動とかならよく有る事。
俺の元いた職場(ガススタ)での例(7時〜20時営業、配達業務あり)
・A店(5名体制) 所長とベテラン2名が移動(新所長はスタンド経験無し、ベテラン、新人1名)
・B店(3名+アルバイト1名…半年前に採用) ベテラン2名入替(初心者と新人)またB店所長はC店所長も兼務していたが、そちらも移動あり)
文面から来月には新体制になるみたいだからそれまでは根を詰めずにね

80 :12/02/28
ド素人の糞コード対ド素人の会話に口出ししたくてムズムズするは

81 :12/02/28
月の途中で抜けたり、月の途中から入るってのは無いの?

82 :12/02/28
>>79
42じゃなかったm(__)m

83 :12/02/28
>>79
自分の職場はルールを変えたりするのを理事長(現トップ)が嫌うので多分ないとは思います
あった時は…大変ですけど;
>>81
月の途中で抜けたり入ったりはまずないです

84 :12/02/28
まずない=ある
だな

85 :12/02/28
俺のこと完全無視だけど、まじでこれを考えるのがプライオリティの最上位だから。
できるのかできないのか、やるのかやらないのか。
結局、全部Ctrl-C,Vでやるのが最速、ってことになるぞ。

86 :12/02/28
>>84
ですよね
ルールが業務の継続に支障を来すようでは本末転倒というもの

87 :12/02/28
278氏、コテハンにしておいて w

88 :12/02/28
ただ今夜勤中でスマホからなので書き込みできません
代行お願いしました
>>84↓は違います
>>84
失礼しました、過去一度だけあったようですが、もしまたあったら調整するようにします
>>85
大変失礼いたしました
どちらでしょうか…

89 :12/02/29
>>88
> どちらでしょうか…
何が「どちらでしょうか」なのかわからないけど、一番重要だけどわからないから考えることから逃げてないか?
実際にコード書くのなんかあとでいいよ。何をするかによって必要なデータもシート構成もかわるし。
> あとは条件を満たした振り分け
これやりたいの?やりたくないの?
やりたいなら、どのレベルで実現したいと思ってるの?

90 :12/02/29
>>44 の要件定義が見れない
>>18と278だけで作るのか?
それならメール等でやり取りしてろ
多くの人の意見が聞きたいなら要件定義位はスレに書けよ

91 :12/02/29
>>90
http://www.dotup.org/uploda/www.dotup.org2696403.txt.html
pass:vba
こちらになります

92 :12/02/29
>>89
振り分けが一番重要かなと考えています

93 :12/03/01
>>92
一番重要なら、なんで>>91の「【プログラム的に欲しいもの】」には入れてないの?
それを、程度は別にして自動化したいのなら、その実現には全開発時間の80〜90%位
かかるよ。
この自動化部分をこのスレの誰かに手伝って貰いたいなら、まずその部分の暗黙知を
形式知にしないと。

94 :12/03/01
>>91
せめてDropboxの公開リンクかなんかにしろよ。ロダとか、流れる前提じゃないか。

95 :12/03/01
>>93
すみません、勤務表をVBAで作る上で一番基本になることだと思っていたので書く必要は無いのかなと考えてました
具体的にどう形式知にするのがよいのでしょうか…

96 :12/03/01
>>95
横レスだが、自動化の範囲とか優先順位を考えといたほうがいいと思う。
例えば、
・最小限の自動化:
次月のラフな割り当て案をルールから自動で作成。
あとは手で調整。
ただし矛盾してる可能性のある部分は表示。(夜勤明け後が休みになっていない、とか)
矛盾部分の表示を見ながら人間が再度調整。
調整に行き詰ったら、割り当て案を再度自動作成(手で調整した部分は消える)。
・もう少し広範囲に自動化:
手で1箇所調整するたびに、関連する割り当て部分を自動変更。
・徹底自動化:
後日の予定外イベント(病欠、異動、役割変更など)への耐性が最大になるプランを自動的に選ぶ。
(カーナビの自動リルートみたいなものを想像)。
など。
まあ、ここまでするのは実際大変だから、最小限の自動化で運用して、足りない必須部分を後付け出来ればいいんだが。
後付け容易にする設計自体がノウハウだから、どこまでやるかの見極めは確かに難しいね。

97 :12/03/01
>>95
> すみません、勤務表をVBAで作る上で一番基本になることだと思っていたので書く必要は無いのかなと考えてまし
なんかそれ以外を一生懸命やってるから、やりたいのかどうなのかわかんなかったよ。
> 具体的にどう形式知にするのがよいのでしょうか…
とりあえず思いついた質問。
これまで作った勤務表は、全て【勤務表条件】を満たしているかどうか。
満たせなかったことがある場合は、どれを満たせなかったのか。
1ヶ月分の勤務表を作るのに必要な時間はどれくらいなのか(hourだよ)。
公開して問題ない過去の勤務表があれば、個人情報等を消して公開する。
従業員の満足度は、【勤務表条件】を満たしてさえいれば、どのようなものでも最高なのか。
次に、どうやって勤務表を作ってきたのか、その手順をざっくりと説明(200〜400文字程度)。
他人に「一から【勤務表条件】を満たすものできる?」と言ってもそりゃわからないよ。
自分はおよそこういう手順で作ってるんだけど、自動化できる?であれば、相談に乗る人も出てくるかも。
【勤務表条件】をもっと明確にする。
たとえば、
「早番はなるべく間を5日以上はあける」というのは、最悪連続しても良いのか。
「勤務がなるべく均等になるように振り分ける」の「均等」とはどういう状態か。
とかかな。

98 :12/03/01
>>96
> ・最小限の自動化:
> 次月のラフな割り当て案をルールから自動で作成。
実は「ラフな割り当て案」が一番難しいんだよ。
「ラフな割り当て案」=【勤務表条件】を100%満たしていない案ということだよね。
【勤務表条件】を100%満たせなければ、試行錯誤なりなんらかのアルゴリズムなりを適用して、
100%満たすものを作る、なら、実現方法は別にしてわかりやすい。
一部条件を満たしてなくて次に行くと、「早番はなるべく間を5日以上はあける」とかいう条件を
全然満たせなくなってくる。
満たせてないところを満たすよう修正すると、それ以降にも影響するでしょ?
だから、「マニュアルで修正可能なラフな割り当て案」というのはとても難しい。

99 :12/03/01
そうだ、これも質問に追加。
これまでに試したことのある自動勤務表生成ツールはあるか?
あるとしたら、それを採用できなかったのは何故か。

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
JavaScriptスレ2 (316)
DarkBASIC (441)
VB6でLinuxを作る方法を教えてください!! (203)
Lisp Scheme Part34 (336)
Lisp Scheme Part34 (336)
.netグレープシティコンポーネント (115)
--log9.info------------------
【GB】今やっても面白いゲームボーイソフト 22 (330)
【レトロ】GG忍びスレ【ゲームギア】 (337)
風来のシレンGB〜月影村の怪物〜part6 (281)
【VC】バーチャルコンソール総合スレッド【GB,GBA】 (607)
【GBC・GBA】シャーマンキング 超・占事略決 (681)
【アルトロン】ホームアローン【クソゲー】 (162)
【GBPは】ゲームボーイプレーヤーGB・GBC・GBA (182)
【亀田】パワプロクンポケット1と2を語る【凡田】 (750)
SFCのオススメゲーム挙げてけ。メジャー以外 (148)
ポケットカメラ (298)
凸テトリス総合スレッド凸 (194)
ポヨンのダンジョンルーム (146)
GB限定クソゲー総合スレ (573)
ONIシリーズを語るスレ (182)
【GBC】スペースネット コスモレッド/コスモブルー (399)
携帯ゲーレトロでのうわぁぁぁぁ (185)
--log55.com------------------
やる大江原スレ74
ウインバリアシオンとオルフェーヴル28
● グラスワンダー146 〜降り積もる夢〜 ●
【本命グルメ】BSイレブン競馬中継57【おうまでQ】
☆的場文男専用スレッドPart75☆
武豊叱咤スレPart 14
☆Jump★障害レース総合スレッド89☆飛越☆
ゴールドシップ part82