ExcelVBAで勤務表を作ろう
■ このスレッドは過去ログ倉庫に格納されています
Excel VBA 質問スレ Part23からの移動
Excel VBA で勤務表を作るスレです
Excel VBA 質問スレ Part23
http://toro.2ch.net/test/read.cgi/tech/1327763113/
>>229
そうですか、よかった;
>>232
パートも嘱託も休みの回数は年度始めに決まっています(事務所から回数書いた紙を貰う)
それも写真撮ってあとでUPします >>233
>ウェブアルバムめんどそうだったのでアプロダですみません
外注したらウン十万円のものタダで作ってもらっておいて
自分の骨惜しみは「面倒」だとかどんだけだよ >>234
だからドロップボックス使えって言ってるだろカスが。
もう絶対コーディングしてやらん。 Googleドキュメントだと確かに面倒だったきがす
他のやつでうpすればいいんじゃね? >>234
Uぷ、すいません。
まだ、ちょこっとしかみてませんけど、やっぱり休みの割り振りに偏りが出てるみたいですね(パラメータの連勤数を下げればかなりかわるかも) >>235
言葉足らずで申し訳ないです…
面倒なのは見るほうがなのでUPするのはすぐ出来ます
>>236
失礼しました、次からはドロップボックスを使うようにします
>>238
偏り出ますね;特にパートのPさんはなぜか月ごとに回数も変わってくるし…
家族での収入による調整だとは思いますが >>278
要件の説明だけだとわからないので
実データをもとにしたデータを3年分ほど
上げてください
前提条件(指定休、希望休、指定休、希望休など)と
実際に作成した勤務表をできるだけ詳しく
お願いします 間違えました
指定休、希望休、指定勤務、希望勤務
です ダウンロードしたの、ボタンを押して動かない
みんなテストできているのか
VBAを直すということは動いているんだろうな 初歩的な質問で申し訳ないですが
セルAP5:AP34に乱数を配置したとして
その中の最大値のあるセルの行番号を求めるにはどうしたらいいのでしょうか? >>247
本当に分からないんだったら
VBAでも何でもいいからプログラミングの本を読んで勉強した方がいいですよ
このレベルのことをいちいち掲示板で訊いていたら答えるほうも切りがないので
例えば一つのやり方として
・変数iを宣言 (カウンタ、行用)
・変数maxRowを宣言 (最大値のある行用)
・maxRow = 5 (初期値)
・for loop でiが6から34まで繰り返す
もし、Cells(i,"AP") > Cells(maxRow,"AP") なら、
maxRow = i とする
・for loop を抜けたら maxRow が最大値のある行番号です
これは、最大値がひとつの場合を想定しています
最大値が複数ある場合は、一番小さい行番号となります >>248
ありがとうございます
まだまだVBA勉強中でして、この程度のことも分からず申し訳ないです なあ、最初の発言が2/19で、もう一ヶ月以上たってるんだけど、VBAの勉強は何時間したの?
正直引くわ まぁ初心者が一ヶ月程度でできるほど簡単じゃないってことだ >>249
勉強中って・・・>>36この時の勢いはどこに行った?
そりゃま初心者じゃどれくらいかかるかなんてわかりようがないよな むしろ1年とか言ってたのが1ヶ月でここまで出来てるなら凄いだろ
全部56がやってくれてるおかげだが >>255
俺?なーんにもしてないよ
18が未完成とはいえ、あれだけ作り上げてると赤の他人としては一寸触れないもんね ExcelVBAパーフェクトマスターくらいは持っておいて損はないと思う
(この本と後、500円くらいの雑誌2冊とマクロの自動記録とかで独学したなあ) >>256
むしろ色々触ってっていいんじゃないか?ダメならうpしないだろうしその方が18も参考になるだろ 昨日、町の書店で見た【ExcelVBA逆引き大全 600の極意】この本良いかも
後、【続ExcelVBAのツボとコツがゼッタイにわかる本】(立山秀利 著)こちらは見たことないがスケジュール表の作成を主題にしているようですね >>256
他人が触れないのは、コードが糞だから。本人は自覚あんのかな?
>>259
最初の一冊に「逆引き○○」とかは全然駄目。
素直に、VBAの基礎とExcelのオブジェクトの操作方法を説明してる本を買うのがいい。 な、俺の予想したとおりになったろ
俺は>>18のコードは仕様的に致命的な欠点(夜勤の回数を指定できない)があって使い物にならんと思ったんだが
278はどう思ってんのだろうな 少し離れた町の本屋行ったけどVBAの本って全然ないんですね…
やっぱり大きい店に行かないとないのか;
パーフェクトマスター素直にネットで買おう
>>261
自分ではとても作れないレベルのものなので使い物にならないなんて思ってないですけど… つまり、今までは勉強する気なんてなかったってことか
アホクサ >>263
そういう本買うから勉強が進まず挫折するんだよ。
この手の本を買いなされ。
『Excel VBAのプログラミングのツボとコツがゼッタイにわかる本―最初からそう教えてくれればいいのに!Excel2007/2003対応 [単行本]』
http://www.amazon.co.jp/dp/4798017973/ 早番、日勤Aが勤まるメンバー数が14名…
詰まりは早番勤務後の次の早番予定は15日後(幅をとって間隔のめやすを12日、最大3回)以下、同様に日勤C〜は16名なので最大2回めやすは14日、最後の休み間隔は4で設定実行…
最初よりかなり良くなったけどメンバー間の休み数のバラツキがもうちょっと…かな? 過疎っちゃてるけど>>278的には使えるレベルなのかな?それとも自動振り分けが満足いくレベルでない?
要求定義にそって色々、弄ろうとしたけど日々の日勤者数=休みの人数が確定してないと無理ぽいなあ >>268
使えるレベルは>>227のことでしょうか?
どこをどうすればうまく割り振れるのか…使いこなせてないです
>日々の日勤者数=休みの人数
これはその日の最低勤務者数ではなくて、ですか 今のロジックだと付属の説明で>>18が述べているように割り振りが難しい。
単純にシフト種別毎に勤務回数(昇順)、最終勤務日、メンバー数(表示Noを使用)のテーブルを参照して逐次探索した方が良さそうなんだけどその日の勤務予定者数が確定してれば尚良いかと
ただ、現ソースに修正しようとすると読みづらくてね… もうちょっと詳しくいうと
@前月分の全勤務状況をシフト毎のテーブル(回数、日付、メンバー表示No)にセット
A当月の指定勤務があればそれも回数にUpしてソートB夜勤1のテーブルから回数の少ないメンバーを検索してセット以降夜勤2、早番テーブルを検索という感じで
※禁止の人は最大値を回数を減らしたいメンバーにはウェイト加算する 夜勤Aの時にペアチェックの追加ロジックが必要なだけで他のシフトも同じアルゴリズムだし前月も今月も同じシフト(前月早番3回したのに今回もまた〜)が多いとかの不満もでない筈…?
只、何か抜けているというか穴があるような気もする(翌日のチェック機能は除く)。
それより実家の収穫に追われてソースを弄れない(;´Д`) アチャ-、指定勤務の事を忘れていた…
まだ勤務中なので帰ったら現行のパラメータ(曜日別のテーブル等)をもうちょっと見直して本当に修正が必要か考えてみますね
>>273 はいです とりあえずModuleFit内の関数fillKinmu→Call setHoliday(c_kinmu)一行をコメントにしてみたが、こっちの方が使い易い気がするんで試してみて
設定ファイルの職員情報内各シフトの最大回数、間隔は適切に近い形に変えるのも忘れずに コードが汚すぎて56意外にはメンテできないのが現状
駄目なら駄目と言え>>278 >>276
了解しました、変更して試してみます
設定ファイルのほうもしっかりと
>>277
自分ではとてもではないけど作れないのでありがたいです >>36
>頑張って一ヶ月くらいで作りたいですね…
1ヶ月たった現状で↑はどうなりましたか。 >>278
>自分ではとてもではないけど作れないのでありがたいです
ありがたいかどうかなんてどうでもいい。
駄目なとこは駄目とはっきり指摘しろと言ってるんだ。
56は駄目な所があっても、仕様がわからないが故に駄目かどうかわからないんだよ。 掘っても掘っても掘っても終わらないけど雨が強くなってきたので今日はもう止める(´`)
パラメーター値をウプしたしました
http://viploader.net/ippan/src/vlippan268959.jpgすまないが、まだガラケーのままなので画面コピーしたのを送ったけれど非表示の部分は早番を参考にして下さい
>>280 ダメというより運用しづらいのではないかと思う。具体的には後で述べるとして後は指定が入った時かな?3月か4月の各人の指定情報をUpしてもらっとけば考証も進んだと思うが >>281
君だれ?
駄目かどうかは>>278にしかわからないだろ。 4:3のスクリーンだとこれで運用するには、かなりきついものがある
メンバーのシフトをいじって確認の為に合計欄のある列へと行ったり来たり…
縮小表示にさせるとオサーンには見づらい
例えれば、お絵描きソフトで全体表示させつつ一部拡大が出来無かったら(全体表示画面と拡大画面を切り替えて操作、切り替えられた方は完全に隠れてしまう)と通じるものがあると思う←意味は通じるかな?
まあ278の所で運用できるDisplayがあれば良いだけの話なんだけど
※俺の職場では日勤、準夜勤、深夜のメンバーがほぼ固定だしシフトを組むのはお局様なので使いません 名前記入し忘れていた…
>282
確かに本人でなきゃわからないんだろうけど(職種も勤務体制も全く異なるし)
言い出しにくい&まだ問題点を把握しきれていないのかも >>284
> 言い出しにくい
作って貰ってありがたいとかいうことなんだろうが、現状のままでいいのか駄目なのか、
駄目ならどこが駄目なのか言わないとわからないということが>>278に通じない。 まだちょっとうまく使いこなせてないので指摘できるまでいってないです;
>>281
パラメータ値ありがとございます、変更しました
指定情報というのは希望休や希望勤務のですか?3月分なら手元にあるのでUPできます
まだ問題点把握しきれてないです…
まだ実行するとエラーが出るのが直せてないのです; >>279
しつけーなww
>>281
>掘っても掘っても掘っても終わらないけど雨が強くなってきたので今日はもう止める(´`)
農家? >>286
仕事の都合で毎度こんな時間での書き込みになってしまうけれど次のような形式で御願いしたい(Googledocは携帯で見れないので勘弁して下さい)
A 休み 5、9
有給 10、11
日3 13、18、24
日X 2、7
日Y 15
B 日X 2、15
:
:
X はその日の日勤者の中でなるべく後ろの方が望ましい場合
Y は特に指定番号なし
指定番号あり、X、Y以外のパターンがあればそのパターンも教えてもらえると助かる
>>287、いや竹林が有るだけ 18やVBAに精通している人も見ていると思うのでどういう時にエラーになるのか詳細な手順を書くのも忘れずに ちょうど書き込みあった時間に目が覚めた…
遅くまでお疲れ様です
A休み 2,4,20,23
有給 29,30,31
B休み 10,14,15,17,18,29
C休み 10,17
Dなし
E休み 24,31
F休み 2,3,10,11,29
Gなし
H休み 16,17,18
I休み 3,4,8,13
J休み 3,8,9
K休み 4,25
L明けか休み 5
Mなし
N休み 3,4,10,11,17,18,24,25,31
O休み 11,15,25
P休み 5,26,27
有給 23
以上が3月の希望勤務の申請になります 書き忘れた
Oは水曜、土曜が毎週休み
Pは土日祝日は全て休み
に加えて上の休日希望です 有難い。朝が早いのでもう寝るけど後で実行してみます この時間に寝て朝が早いんだ…
いつもありがとうございます、頑張ってください >>286
> まだちょっとうまく使いこなせてないので指摘できるまでいってないです;
わかんない奴だね。
「使いこなせない」のは何故なのかも有用な情報だというのに。
それと、とりあえずは結果は得られるわけだろ?その結果がどうなのか評価しろって。 間違えて本体消してしまった。。。
またいつでもいいので>56再うpしてくれるとありがたい >>290-291の内容でTRYしたら"日勤の割り当てで失敗"のメッセージがでるね
直接の原因は3日に日勤者5名を確保出来なかった為(夜勤、明け、早番で既に5名必要)
そもそも1日に夜勤の割り振りが上手く行っていないということで嘱託の西田さんを夜2(職員設定の休み間隔は7)に指定してみたが、やはり同メッセージと指定そのものが取り消され空欄になってしまう 指定解除ボタンを押した時のエラーは
× Formula1:="=勤務番号"
○ Formula1:="勤務番号"
にすれば直る >>295
だから作ったのは俺じゃないし、ネットにも繋いでないとry
>>299
色々試した結果、一旦選択されたセルをActiveにするといいみたい
If Not Application Intersect…
rng.Activate
rng.Validation…←エラー行
>>278は>>296的なのにはどう対応した? 自分はそこ対応できてないです
自分は同じようにやると'指定勤務の反映の
kinmuban = base_kinmu.Offset(r_adjust_kinmu + r_kinmu, c_kinmu)
でエラー出てしまうので… >>301
エラーメッセージの内容がわからないのでブレークポイントに設定して値を確認すると
r_adjust_kinmu = 2
r_kinmu = 1
c_kinmu = 43
後モジュール変数の初期化でbase_kinmu = ws_kinmu.Range("A6")をセット
仕事に行きます 過去スレを読み返していたら>>207のエラーの事?
EOMONTHワークシート関数を使用しているのでツール→アドイン→下の方にある「分析ツール」のチェックボックスにONにする
(俺が組み込んだのが6年前なので自信がないけど)
該当月の最終日(2月の最終日が28、29日かも含む)を判定するのに非常に便利な関数なんだけれどもExcel2000では標準として組み込まれていない この程度の関数で、明示的な追加インストールが必要な分析ツールなんか使うなよ =DATE(YEAR(A1),MONTH(A1)+1,0)
みたいでもいいんじゃね >>305
この程度の言語によらない常套手段も知らないの?
大抵の言語では日付けの加算減算ができる。
当月最終日=翌月1日の日付け-1日だ。
VBAでどう書くかは自分で調べろ。 6年もExcel/VBA使っててこのザマかよ
才能ないよ >>307
>VBAでどう書くかは自分で調べろ。
その程度のこともわかんないの?なら黙ってろよw >>306の意味がわからなかったのかな?
「(今月+1)月0日目」で今月末だ >>309=>>56かw
ゴミだのクズだの言われて悔しいのぅw 呼ばれているようなのでレスしようとしたが、何度も間違えて消してしまっていたので放置してしまった…
2007から?EOMONTH関数は標準として組み込まれいるので>>18は知らずに使ったのではないのかな
俺の時はExcelの勉強中(アドイン何それ?美味しいの?)で分析ツール-VBAと一緒に組み込んだんだけど>>278は治ったのかな?
>>268で日々の日勤者数=休みの人数が確定してないと無理ぽいなあとかいたけどよくよく見たら合計欄の下の行にエリアが設けてあるんだね
気づかんかったわ… なんだ、>>56はこの糞コードの作者じゃないのか。
勘違いしてた。悪い。ごめん。 希望休通りの勤務表が出来るかわからないから
なにがダメなのか知りたいのに、エラーで返す。
ここで人が足りないと表示するのがふつーなのに やっと筍掘りが終わった…
>>278は諦めちゃたのかな? 自分の実力では最早どうにもならないと理解しました…
本買ったり調べたりしながら作っていたけどここで他の方が作ってくれたようなものはとてもではないけど出来ないとわかりました;
勤務表以前に人数足りないとかいう話だったのは結局どうなったんだろう
278氏のレスが全然ないから
過労で死亡とか過密スケジュールを恨んだ同僚に刺されて死亡とかボケた老人に首を絞められて死亡とか
色々嫌な想像しちゃったよ そりゃ誰だって初めては、そうじゃないのかな
まあ初心者には高レベルなのは確かだけどね
見直しさせて貰っているけど今ひとつ勤務表作成のレイアウトが気に入らなくて悩んでいるんだよなあ
注、自動振り分けの方法は前に述べたやり方で、やろうと思っているんだけど >>319
やっと、>>45が正しかったことを実感したか。
経験者の言うことは聞いとくもんだぞ。 >>321
人数不足は何とか乗り越えてます
新人2人入って(一人は3月から研修)4月中には二人とも夜勤やれるようにまでなりました
ご心配?おかけしました;
>>322
高レベル過ぎますね…何とかなるなんて甘い考えでした
自分はレイアウトまで拘る余裕なかったので;;
自動振り分けはそれが一番よさそうですかね
>>323
否定できません 普通に発注したら幾らぐらいするんだろ
4人月で400万くらい?
Excelの単価相場知らないけど アルゴリズムとかちょっと考ようとしたけど
結構難しい部類に入るねこれ
ノウハウ無いと4人月じゃ済まないな だけどそんなにはかからないだろ
十数万はかかると思うが 有料の線ならパッケージ導入&カスタマイズ(設定)が一番安く上がると思う
要件定義から受け入れテストまでがっちりやったら時間かかるが
コーディングだけなら0.8人月くらいかな 有料で金払ってまでするもんじゃないだろ
楽にはなるだろうが278だって今手書きで出来てるわけだし 勤務表作る労力は半端ないから有料でも価値はあるよ
ただ勤務表作成はNP困難な問題だから
半端なものを作るより手作成の方がコストがかからなかったり
精度が高かったりする このスレに載ってる要件だけ見て
基本設計書書いてみたがもう力尽きた
この処理じゃうまく動かん気がするし
http://www.dotup.org/uploda/www.dotup.org2944558.jpg
3時間なにやってたんだorz 新しい案がでて来たみたいだね…
手作成はちゃんとした人が作れば良いんだけれど恣意的に作ったんでは無いかと(作成者にとって都合が良いとか)疑われ易く職場への不満要因のひとつでもあるからねぇ
http://n2ch.net/r/7I5-774F---VVR/welfare/1320418159/?guid=ON
しかし自分のセンスの無さに絶望(T_T)
今の勤務表作成シートの下にある日別の日勤割り当て数と日勤割り当て可能残数を上の行に持って行きたいんだけどレイアウトが小汚くなっちゃうよ ■ このスレッドは過去ログ倉庫に格納されています