ExcelVBAで勤務表を作ろう
■ このスレッドは過去ログ倉庫に格納されています
Excel VBA 質問スレ Part23からの移動
Excel VBA で勤務表を作るスレです
Excel VBA 質問スレ Part23
http://toro.2ch.net/test/read.cgi/tech/1327763113/
わかった。分析ツールが必要なんだ。
どういうロジックで勤務表を生成しているのか、コードをちょっと見ただけではわからないけど、
これ、かなり良い線行ってるのかな?
ちょっとアドバイス。
ワークシート関数は段階的に計算結果を保存しながらやった方がわかりやすい。
例えば、
AZ6 = "月末"
AZ7 = EOMONTH(DATEVALUE(SUBSTITUTE(SUBSTITUTE($A$4,"勤務表","")," ","")& "1日"),0)
とかにして、表内の計算式ではAZ7の値を参照するとか。
あるいは、もっとダイレクトに「当月の日数」を計算してセルに入れるとか。
もっと言うと、A4には2012/4/1を設定して、書式を「ggge"年" m"月" "勤務表"」にすれば、
A4を日付データとして扱える。
あと、好みだけどconstは英大文字を_でつなげた単語にすると見やすい。r_adjust_kinmuは、R_ADJUST_KINMU。
これで、俺がこのスレに居る理由ももう無いかな。 ろくに動かん糞コード引きずってないで
無視して先へ進もうぜ 今後の流れだが、278がもっとガンガン書いていかんと全く進まんぞ
自主的に要件、設計、コードでも頻繁に書いて70他がアドバイス
周囲を巻き込み続けないとな
とにかく色々いじって見たけどやっぱり難しい…
>>212
アドバイスありがとうございます
教えていただいたところ試してみたいと思います
大文字のほうが見やすいですね
>>214
ガンガン書いていかなきゃですよね;
でもUPしてもらったものもなかなか直せないしもっと勉強しなきゃ…
もっと頑張ります 明日、友人に頼んで>>18の内容をダウンロードしてもらうので宜しければ再Upお願いします
>>215
> とにかく色々いじって見たけどやっぱり難しい…
何が難しいのか、具体的に言わないと
@自動振り分けの結果はかなり悪い〜良い?かなり良い?
A手入力による調整が難しい
・そもそもおかしな所をみつけるのに時間が懸かりすぎて難しい?(各人の休み、勤務種別毎の合計表示がないので278の頭の中で計算しないといけないとか)・一件の手入力に時間がかかる(特に日勤の入力等)や誤った操作で消してはいけない所を消してしまったとか
B初期設定(職員情報等)の変更、追加、削除に時間がかかるとか設定方法そのものがわかりづらいとか
>>216
どちらかというと自分の知識不足でコードを読むのすら大変です…
もともと学校で少し習った程度しかVBAは分からないので;
本やネットで調べながらやってるから余計時間がかかってしまってます 途中で寝落ちしてしまった…
VBAは初心者レベルなので>>18のプロトタイプのコードの中身を理解するのに苦労しているという事ですね
そこは頑張ってとしか言いようがない
俺も初心者レベルでほぼ独学でExcelの使い方を学んで勤務表他業務用数本をVBAで組んだだけなので18のソースを追えるかちょっと不安>< 読めない方が悪いのではない
読めないコードを書く方が悪い ざっと眺めて読みにくいコードなのでやめた。
たまに覗いてるけど、70がいなくなったら終わりだな。 レガシーコード(テストの無いコード)のリファクタリング大好きっ子なんだけど、
人様のコードを勝手に修正するのもアレだし、時間も無いし…。
ステップ実行しながら追えば読めるとは思うよ。 まだDLしていない…
>>70,142さんが読みにくいと云うことはコメント類も殆どついてないのかな?
まあ>>18さんは振り分けの結果が満足のいくレベルか確認したくて超急ぎで作ったんだろうし(不満が大きければ振り分けのアルゴリズムを大幅に変更してもらえる?)
2000だとシート上に項目追加するだけでえらく影響が出たりするから(2007?からある程度連動するとか雑誌でみたような…)
俺的には名前と日別のシフト状況の間に休み、日勤、夜勤数等を列項目に
日の下に行事日区分、希望日勤者数、実日勤者数を行項目として表示させようかなあと考えていたので読めないと肉付けも難しいですよね
>< ガラケーだと書き込みにも条件が多すぎる… (;´Д`) >>223
コメントは所々に入ってるよ。
ファイルがいくつにも分かれてて、あちこちのファイルにコードが分散してて読みにくい。
再Upとしてすぐ修正できるところだけ数行追加しました
・Sheet1で空セルが指定できるところ
・確認用に色付けしたまま、リセットやトライすると色が残ってしまうところ
http://www.dotup.org/uploda/www.dotup.org2747401.zip.html
pass:vba >>222
人様のコード勝手にいじっちゃダメでしたかね;
まだいじったって言えるほど変わってないけど…
>>223
バージョンの更新?したから2007になってると思ってたけど、確認したら2000のまま…バージョン自体は変わらないのかな?
希望日勤者数の項目があれば行事日区分はいらないかもです
>>227
修正版ありがとうございます
まだ変更箇所確認してないのでこのあと確認させていただきます >>226さん有難う。>>227の分含めてDLして貰えました。
今から見ようと思います。スレちになるけどスマホだとDLしてmicroSDにおとしてパソコンで見る事が出来るのかな?
電池の持ちが余りにも悪くて買い換えようか悩んでいるもので…
動画とか余り見ないしネットも2チャンくらいなものノートも一年以上動かしてなかったし (^o^; >>231 それなら買い換えてもいいかな
>>278さん、もう少し質問。
@嘱託の休みが多いのは事務所から働ける毎月の勤務日数或いは時間数の指示がなされている?
Aパートの場合も同じ?
132時間以上で会社の社会保険加入義務(強制)が発生し主婦の場合118時間超で税金を納めなくてはいけなかったのを思いだしたものですから… >>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 ■ このスレッドは過去ログ倉庫に格納されています