[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『シフト作成 コード添削2 宜しくお願い致します。』(なのれい)
いつもお世話になっております。
皆様ご存じだと思うんですが、シフト作成を行っております。
自分のコードが甘いので添削して頂けないでしょうか?
宜しくお願い致します。
条件
・連続勤務6日以下になる事
・休み(公)の前日は早番(A)、次の日は遅番(B)
・月の公休は6日間
・出勤のサイクルとしてBA公の順になる
例 BBBAA公BBA公BAA
ABのパターンにはならないってことです。
・上記条件に当てはまらない従業員も数名います。
・希望休を手入力するタイミングが欲しい
C D E F G H I J K 4 2019 10 月 1 2 3 4 5 6 5 火 水 木 金 土 日 6 名前 連勤日数 月末出勤 7 伊藤 2 A 8 工藤 2 A 9 加藤 2 A 10 佐々木 2 A 11 氏名 2 B 出 12 氏名 2 B 出 13 氏名 2 B 出 14 氏名 2 B 出 15 氏名 2 B 出 16 氏名 2 B 出 17 氏名 0 公 18 氏名 0 公 19 氏名 0 公 20 氏名 0 公 21 氏名 0 公
添削して頂きたいコード
Sub 奇数行の背景() Dim 氏名最終行 As Long, i As Long With Worksheets("作成シート") 氏名最終行 = .Range("C6").End(xlDown).Row
For i = 7 To 氏名最終行 Step 2
Range(.Cells(i, 1), .Cells(i, 50)).Select With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent5 .TintAndShade = 0.799981688894314 .PatternTintAndShade = 0 End With
Range(.Cells(i + 1, 1), .Cells(i + 1, 50)).Select With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With
Next i
End With
End Sub
前回コードの最後に上記コードを入れたいと思っております。
理由はこの処理の後に、希望休の手入力をしたいので見えやすい様に背景を変えました。
Sub 月末連勤チェックと月初めシフト() Dim 氏名最終行 As Long, 月末日 As Long, i As Long Dim 最終公休日 As Range With Worksheets("作成シート") 氏名最終行 = .Range("C6").End(xlDown).Row 月末日 = Format(DateSerial(.Range("C4"), .Range("D4") + 1, 0), "d") + 7
.Range("D6:L" & 氏名最終行).Clear .Range(.Cells(7, 月末日), .Cells(氏名最終行, 月末日)).Copy .Range("G7")
For i = 7 To 氏名最終行
Set 最終公休日 = .Range(.Cells(i, 8), .Cells(i, 月末日)).Find(What:="公", LookIn:=xlValues, LookAt:=xlWhole, SearchDirection:=xlPrevious)
If Not (最終公休日 Is Nothing) Then
.Cells(i, 6).Value = 月末日 - 最終公休日.Column
If .Cells(i, 7).Value = "B" Then .Cells(i, 8).Value = "出" End If End If
Next i
If .Range("D4").Value < 12 Then .Range("D4").Value = .Range("D4") + 1 Else .Range("D4").Value = 1 .Range("C4").Value = .Range("C4") + 1 End If .Range("L7:AL" & 氏名最終行).Clear End With
Call 奇数行の背景 End Sub
添削宜しくお願い致します。
< 使用 Excel:unknown、使用 OS:unknown >
こんばんは ^^ いろいろ方法はあるかと思いますが。。。^^; 最後に呼び込んでも良いのですが2回同じループ回すことになるので 処理速度など勘案すれば必要な物だけ最初のループの最後にほり込 んじゃえば簡単かもですね。
If i Mod 2 <> 0 Then With .Range(.Cells(i, 1), .Cells(i, 50)).Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent5 .TintAndShade = 0.799981688894314 End With End If m(_ _)m (隠居じーさん) 2019/10/01(火) 18:14
もちろん、下記の様な感じで最後に、読み込んじゃっても良いかもです。 もっと良い方法が有るやもしれません。。。ほんの一案ですm(_ _)m
Option Explicit Sub 奇数行の背景() Dim 氏名最終行 As Long Dim i As Long With Worksheets("作成シート") 氏名最終行 = .Range("C6").End(xlDown).Row For i = 7 To 氏名最終行 If i Mod 2 <> 0 Then With .Range(.Cells(i, 1), .Cells(i, 50)).Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent5 .TintAndShade = 0.799981688894314 End With End If Next i End With End Sub (隠居じーさん) 2019/10/01(火) 18:22
以降に背景を変えたいので最後にしました。
Mod を使う事で奇数行のみの処理を出来るってことが分かりました。
ありがとうございます。
参考にさせて頂き、下記コードになっております。
Sub 奇数行の背景() Dim 氏名最終行 As Long, i As Long With Worksheets("作成シート") 氏名最終行 = .Range("C6").End(xlDown).Row
For i = 7 To 氏名最終行 Step 2
If i Mod 2 <> 0 Then With .Range(.Cells(i, 1), .Cells(i, 50)).Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent5 .TintAndShade = 0.799981688894314 End With End If Next i
End With
End Sub
(なのれい) 2019/10/01(火) 18:27
こんばんは ^^ そぉですね Clear 見落としていました 、色、消えてしまいますよね。それと7から始まってStep 2 付けるなら、MOD 2の条件文は要いらないですね。 (ひっかけ見たいで済みません、私も今気が付きました) ^^; 。。。とほほ。。。済みませんでした。 m(_ _)m (隠居じーさん) 2019/10/01(火) 18:47
であれば、マクロを考えるような話でもないような・・・
また、
For i = 7 To 氏名最終行 Step 2 If i Mod 2 <> 0 Then
だと、毎回,True判定になるので意味が無いかと。
実行速度の観点から言えば、先に対象セルを特定してから、最後に一括して処理すべきだと思います。
Sub 実験15() Dim i As Long Dim MyRNG As Range
For i = 1 To 50 Step 2
If MyRNG Is Nothing Then Set MyRNG = Cells(i, 1).Resize(, 50) Else Set MyRNG = Union(MyRNG, Cells(i, 1).Resize(, 50)) Else Next i
If Not MyRNG Is Nothing Then
With MyRNG .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent5 .TintAndShade = 0.799981688894314 End With End If
End Sub
(もこな2 ) 2019/10/01(火) 18:50
もこな2さん
面倒かもしれないのですが、いいアイデアが思いつかばず下記の手順にしようと思っております。
まず
希望のシフト 背景黄色
希望以外の公休 背景オレンジ色
その他は 塗りつぶしなし
になっております。
従業員約15〜20名
来月分のシフトを作りたいので、一度clearの処理をしたい。
今回の処理の後に手入力で希望シフトを入れたい。
その際に見えやすい様に1行おきに背景の色を変えたい。
希望シフトの入力が終わったら、またclearをかけ下記条件にしたい。
希望のシフト 背景黄色
希望以外の公休 背景オレンジ色
その他は 塗りつぶしなし
現在のコード
Sub 奇数行の背景()
Dim 氏名最終行 As Long, i As Long With Worksheets("作成シート") 氏名最終行 = .Range("C6").End(xlDown).Row
For i = 7 To 氏名最終行 Step 2
With .Range(.Cells(i, 1), .Cells(i, 50)).Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent5 .TintAndShade = 0.799981688894314 End With
Next i
End With
End Sub
このコードでも問題なく処理出来ていますが、何か問題ありそうでしょうか?
(なのれい) 2019/10/01(火) 19:11
■2
>まず
>希望のシフト 背景黄色
>希望以外の公休 背景オレンジ色
>その他は 塗りつぶしなし
>になっております。
これは、実際の表がそうなっているんじゃなくてそういうルールで処理したいってことですよね?
■3
>このコードでも問題なく処理出来ていますが、何か問題ありそうでしょうか?
問題というか・・・それ作成途中ですよね。今の状態ではなんとも・・まぁエラーにはならないとおもいます。
処理順としては
1 表範囲のセルの"書式"をクリアする ← 前トピックで実現されていると思われます 2 希望のシフト のセルを特定して塗りつぶし 3 希望以外の公休 のセルを特定して塗りつぶし 4 網掛けなど塗りつぶし以外の方法で、1行おきに見た目を変えて見やすくする
みたいな感じですかね。(2,3,4 の順番は順不同)
■4
先ほど、↓を投稿しましたが確認していただけましたか?
>実行速度の観点から言えば、先に対象セルを特定してから、最後に一括して処理すべきだと思います。
なんで、そのように言ったかというと、たとえばFor i = 7 To 20 Step 2 の場合、7回セルの書式設定を行うことになります。
たぶん、今のパソコンは高速に動作しますから、体感するほどの差は出ないと思いますが、そもそもExcelの仕組みとして、何かをメモリ上に覚えることより実際のセルに値を書き込んだり、書式を変更したりすることのほうが、ずっと時間がかかるのです。
なので、時間のかかる同じ行為を7回繰り返すより、先に処理すべきセルを特定して(メモリ上に覚えて)おいてから1回だけ処理すべきと投稿しました。
これは、今すぐにわかららないかもしれませんし、繰り返しになりますが7回くらいでは大きな差はでないとおもいますので、無理して採用しなくてもよいとはおもいます。
とりあえず処理時間の話がでてましたので、投稿しました。
■5
>毎回,True判定になるので意味が無いかと。
読み返してみたら、隠居じーさんさんと被ってました。ごめんなさい。
■6
>皆様ご存じだと思うんですが、シフト作成を行っております。
ご存じじゃない方もいらっしゃると思いますし、このトピックから見る方もいらっしゃるかもですから、関連するリンクは最初に書いておいたほうがよいように思います。
【関連トピック】 [[20190914110320]] 『CALLでプログラムを呼ぶと上手く処理されない』(なのれい) [[20190929192243]] 『シフト作成、1 コードの添削宜しくお願い致します。』(なのれい) [[20191001170356]] 『シフト作成 コード添削2 宜しくお願い致します。』(なのれい)
(もこな2) 2019/10/01(火) 21:24
お話を全部読んで理解しているわけじゃないですけど、
むやみにコードに向かって、難儀されている印象です。
添削やサンプルコードを提示してもいいなとも思いつつ読ませていただいてますが、
今一つ、ルールが分からなくてコメントできないなーと静観させていただいてますが、
どうも進展がなさそうなので、ちょっと横槍です。
とりあえず、コード的なテクニックは置いておいて、
まずはルールというか決まる優先度を明確にしてください。
僕も素人でそういうシフトの作成の経験が無いのですが、
なのれいさんは現状手動で行っておられるのですよね?
ならばその手順を言語化してみてください。
それをVBA語に翻訳するのを手伝ってもらうというスタンスで話を進めてみてはいかがでしょうか?
他人に作業手順をきちんと説明出来なければ、
エクセル君にも命令がきちんと伝わらないと思いますよ。
(まっつわん) 2019/10/02(水) 16:43
申し訳ありません。
今一度作業手順を整理して言語化をはっきりしてみたいと思います。
整理しましたら、また新たにコード載せますので添削して頂けないでしょうか?
よろしくお願いいたします。
(なのれい) 2019/10/03(木) 01:22
>『シフト作成、1 コードの添削宜しくお願い致します。』(なのれい) >『シフト作成 コード添削2 宜しくお願い致します。』(なのれい)
次回から、挨拶の文言はタイトルには入れず、本文に書いてください。
(半平太) 2019/10/03(木) 07:26
┌───┬─┬─┬─┬─┬─┬─┬───┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐ │ │ │ │ │ │ │ │ 2019 │10│月│ │ │ │ │ │ │ │ │ │ │ │ ├───┼─┼─┼─┼─┼─┼─┼─┬─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐ │ │25│26│27│28│29│30│ 1│ 2│ 3│ 4│ 5│ 6│ 7│ 8│ 9│10│11│12│13│14│15│16│17│18│19│20│21│22│23│24│25│26│27│28│29│30│31│ │ ├───┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ │名前 │水│木│金│土│日│月│火│水│木│金│土│日│月│火│水│木│金│土│日│月│火│水│木│金│土│日│月│火│水│木│金│土│日│月│火│水│木│計│ ├───┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ │伊藤 │公│B │B │A │A │A │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ 0│ ├───┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ │工藤 │A │公│B │B │B │A │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ 0│ ├───┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ │加藤 │B │A │公│B │A │B │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ 0│ ├───┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ │佐々木│B │B │A │公│B │B │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ 0│ ├───┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ │A │ 1│ 1│ 1│ 1│ 2│ 2│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ │ ├───┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ │B │ 2│ 2│ 2│ 2│ 2│ 2│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ │ ├───┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ │公 │ 1│ 1│ 1│ 1│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ │ └───┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
今回の休みを決めるためには、
6日分の過去データがまずは必要ですよね?
あと、日毎の出勤者のバランスも見たいですよね?
それから、確認の出勤日数もみたいですよね?
これプラス、各人の希望の休みの日も管理したいですよね?
それを考慮すると↑のような表になって、
まず最初に希望の休みを入れていくことになると思いますが、
いかがでしょうか?
(数字が入っている箇所は1列目と1行目以外は数式を入れておきます。)
マクロを起動する前に、前提条件として、
ここまでが必要になると思いますがいかがでしょうか?
で、この後空白を埋めて行けばいいと思いますが、
希望の休みの前もやはり早出で、休み明けは遅出という事でしょうか?
ということは、連休は基本ないという事でしょうか?
この辺のルールを洩れなく明示してみてください。
とりあえず、コードを書くことは置いておいて、
他人につたわるよう日本語で書いてみましょう。
そうすることで、ご自分の頭の中も整理されるはずです。
(まっつわん) 2019/10/03(木) 11:10
支持者4名
男性社員4名
女性社員3名
清掃スタッフ2名
閉店後の清掃スタッフ3名
どのグループも増減する可能性があるのでそれを考慮して作成したいです。
公休と希望休(手入力)は合わせて6日間(女性社員1名を除いて)
上記とは別で有給休暇を設けたい。(手入力)
曜日休みの従業員がいるので曜日休みは最優先で行いたい。
入替のチェックの前日に出勤にしたい従業員もいるので、これが次の優先。
曜日休み以外の人が休み前早出で休み後が遅出
全員7連勤務以上しない事
2連休は希望休のみの場合出来る。
支持者4名
男性社員4名
女性社員3名
早出も遅出も上記が必ず1名以上いて、トータル4名以上になること。
清掃スタッフ2名
遅出に必ず1名いること。
すみません、時間内中書いたので確認漏れあるかもしれません。情報不十分なことありましたら指摘お願いいたします。
(なのれい) 2019/10/03(木) 11:59
>2連休は希望休のみの場合出来る。 希望休の前後は何が来てもいいのですか?
(まっつわん) 2019/10/03(木) 12:10
A公公B
という表記になります!
(なのれい) 2019/10/03(木) 13:03
とりあえず、、、伝わってないなぁ^^;
2連休は関係なく、
希望休の前後は何が来てもいいのですか?
例)
A公B希B
A公BB希BA
とか
あ、曜日で休むときも
A曜B
は必須ですか?
あと、曜日で休む人は何曜が休みか決まっているんですか?
あと、希望休は1月に何回ですか?
(まっつわん) 2019/10/03(木) 13:45
A公B
になります!
今晩、今月のシフト載せます!
(なのれい) 2019/10/03(木) 14:33
2019 10 月 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 火 水 木 金 土 日 月 火 水 木 金 土 日 月 火 水 木 金 土 日 月 火 水 木 金 土 日 月 火 水 木 入替 入替 リーダー Aさん B B A A B 公 B B A A B 公 B A A 公 B B A A 公 B B B A 公 B B B A 公 Bさん B A 公 B B B B A 公 B B A 公 B B B A 公 B B B A A 公 B B A A 公 B B Cさん 公 B B A A B 公 B B A 公 B B B A A 公 B B A A 公 B B B A A 公 B B A Dさん A 公 B B A A A 公 B B A A A 公 B B A A A 公 B B A A A 公 B B A 公 B 男性従業員 Eさん A 公 B B A A B A 公 B A A A A 公 B B A 公 B B A A 公 B B A A A 公 B Fさん 公 B A A A A 公 B B B A 公 B B A A A 公 B A A 公 B A A A 公 B B A A Gさん A A 公 有休 B B B B A A 公 B A A A 公 B B A 公 B B B A 公 B B A A A 公 Hさん B A A 公 B A A A A 公 B B A 公 B B B A 公 B A A 公 B B A A 公 B B A
女性従業員 Iさん B 公 B B B B A A 公 B B A 公 B B A A 公 B B B B A 公 B B B A A 公 B Jさん 公 B A A A 公 B B B A 公 B B A 公 B B B A A A 公 B B A A 公 B B B A Kさん A A 公 公 公 公 A A A A A 公 公 A A A A A 公 公 公 A A A 公 公 公 公 A A 公
2019 10 月 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 火 水 木 金 土 日 月 火 水 木 金 土 日 月 火 水 木 金 土 日 月 火 水 木 金 土 日 月 火 水 木 早番 4 4 4 4 5 4 4 5 4 5 4 4 4 5 5 4 5 4 4 4 4 4 5 4 4 4 4 4 5 4 4 中番 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 遅番 4 4 4 4 5 4 5 5 4 5 4 4 4 4 4 5 5 4 4 4 5 4 5 4 5 4 4 4 5 4 4 公休 3 3 3 2 1 3 2 1 3 1 3 3 3 2 2 2 1 3 3 3 2 3 1 3 2 3 3 3 1 3 3
2019 10 月 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 火 水 木 金 土 日 月 火 水 木 金 土 日 月 火 水 木 金 土 日 月 火 水 木 金 土 日 月 火 水 木 清掃員 Lさん A 公 B B A A A 公 B B A 公 B B B A 公 B B B B A 公 B B A A 公 B B B Mさん B B A 公 B B B B 公 公 B B A A 公 B B A 公 A A B B A 公 B B B A A A
閉店後清掃員 Nさん 公 公 公 公 公 公 Oさん 公 有休 公 有休 公 公 公 公 Pさん 公 公 公 公 公 公
公休 1 2 0 2 0 0 0 2 2 1 1 2 0 1 2 1 1 1 1 1 0 1 2 0 2 0 1 1 1 1 0
(なのれい) 2019/10/03(木) 17:48
そのほかの条件
・Kさん以外の公休が6日間
・Kさんと閉店後清掃員以外が、休み前Aで休み後がBになる事。
・Kさんは土日休み
・閉店後清掃員は、平日に曜日休みが入っていてそのほかの平日が出勤。
・リーダーと男性と女性がかならずいる事。なおかつ、早番4名、遅番4名以上になる事。
(なのれい) 2019/10/03(木) 17:58
┌─────────────┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐ │2019年 10月│1 │2 │3 │4 │5 │6 │7 │8 │9 │10│11│12│13│14│15│16│17│18│19│20│21│22│23│24│25│26│27│28│29│30│31│ 小計 ルール │ ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤┌──┬─┬─┬─┬─┬─┬─┐┌───┬──────────────┬─┬─┬─┬─────┐ │ │火│水│木│金│土│日│月│火│水│木│金│土│日│月│火│水│木│金│土│日│月│火│水│木│金│土│日│月│火│水│木││ A │B │公│有│土│日│計││A │B │公│土│日│最終休日 │ ├───┬─────────┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤├──┼─┼─┼─┼─┼─┼─┤├───┼──────────────┼─┼─┼─┼─────┤ │ 1│Aさん │B │B │A │A │B │公│B │B │A │A │B │公│B │A │A │公│B │B │A │A │公│B │B │B │A │公│B │B │B │A │公││ 10│15│ 6│ 0│ 0│ 0│31││ │ │ 6│ 1│ 1│ 2019/9/27│ ├───┼─────────┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤├──┼─┼─┼─┼─┼─┼─┤├───┼──────────────┼─┼─┼─┼─────┤ │ 2│Bさん │B │A │公│B │B │B │B │A │公│B │B │A │公│B │B │B │A │公│B │B │B │A │A │公│B │B │A │A │公│B │B ││ 8│17│ 6│ 0│ 0│ 0│31││ │ │ 6│ 1│ 1│ 2019/9/29│ ├───┼─────────┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤├──┼─┼─┼─┼─┼─┼─┤├───┼──────────────┼─┼─┼─┼─────┤ │ 3│Cさん │公│B │B │A │A │B │公│B │B │A │公│B │B │B │A │A │公│B │B │A │A │公│B │B │B │A │A │公│B │B │A ││ 10│15│ 6│ 0│ 0│ 0│31││ │ │ 6│ 1│ 1│ 2019/9/28│ ├───┼─────────┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤├──┼─┼─┼─┼─┼─┼─┤├───┼──────────────┼─┼─┼─┼─────┤ │ 4│Dさん │A │公│B │B │A │A │A │公│B │B │A │A │A │公│B │B │A │A │A │公│B │B │A │A │A │公│B │B │A │公│B ││ 14│11│ 6│ 0│ 0│ 0│31││ │ │ 6│ 1│ 1│ 2019/9/30│ ├───┼─────────┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤├──┼─┼─┼─┼─┼─┼─┤├───┼──────────────┼─┼─┼─┼─────┤ │ 5│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ 0│ 0│ 0│ 0│ 0│ 0│ 0││ │ │ │ │ │ │ ├───┼─────────┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤├──┼─┼─┼─┼─┼─┼─┤├───┼──────────────┼─┼─┼─┼─────┤ │ 6│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ 0│ 0│ 0│ 0│ 0│ 0│ 0││ │ │ │ │ │ │ ├───┼─────────┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤├──┼─┼─┼─┼─┼─┼─┤├───┼──────────────┼─┼─┼─┼─────┤ │ 7│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ 0│ 0│ 0│ 0│ 0│ 0│ 0││ │ │ │ │ │ │ ├───┼─────────┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤├──┼─┼─┼─┼─┼─┼─┤├───┼──────────────┼─┼─┼─┼─────┤ │ 8│Eさん │A │A │公│公│公│公│A │A │A │A │A │公│公│A │A │A │A │A │公│公│公│A │A │A │公│公│公│公│A │A │公││ 17│ 0│14│ 0│ 0│ 0│31││ │ │ 6│ 0│ 0│ │ └───┴─────────┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘└──┴─┴─┴─┴─┴─┴─┘└───┴──────────────┴─┴─┴─┴─────┘
小計 1) 公の前はA ┌─────────┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐ │A │ 2│ 2│ 1│ 2│ 2│ 1│ 2│ 2│ 2│ 3│ 2│ 2│ 1│ 2│ 3│ 2│ 3│ 2│ 2│ 2│ 1│ 2│ 3│ 2│ 2│ 1│ 2│ 1│ 2│ 2│ 1│ 2) 公の後ろはB ├─────────┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ │B │ 2│ 2│ 2│ 2│ 2│ 2│ 2│ 2│ 2│ 2│ 2│ 1│ 2│ 2│ 2│ 2│ 1│ 2│ 2│ 1│ 2│ 2│ 2│ 2│ 2│ 1│ 2│ 2│ 2│ 2│ 2│ 3) 公の基本間隔は5日 ├─────────┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ │公 │ 1│ 1│ 2│ 1│ 1│ 2│ 1│ 1│ 1│ 0│ 1│ 2│ 2│ 1│ 0│ 1│ 1│ 1│ 1│ 2│ 2│ 1│ 0│ 1│ 1│ 3│ 1│ 2│ 1│ 1│ 2│ 4) 各日の最低人数はAB共1名 ├─────────┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ │有 │ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 0│ 5) 土日休みの人は表に0を入れる └─────────┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘ それ以外は1
ルール(最低人数) 6) AB共全体で4名以上になること ┌─────────┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐ │A │ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ ├─────────┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ │B │ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ ├─────────┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ │公 │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├─────────┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ │有 │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └─────────┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
まずは大まかな作業の流れを言葉にしていきます。
1)プログラム起動
2)表の初期化
3)希望の休みの日及び有休日のセルを選択して決定
4)ルールに則り他の公休日及び個人の定休日、前後のA,Bを決定
5)空欄をバランスを取りながら埋める
6)ファイルからマクロと数式を無くして保存
7)プログラム終わり
で、各作業の詳細の流れを言葉にしていきます。
表の初期化
0)プログラム開始
1)各人の最終休みを記録
2)入力欄クリア
3)年月を+1月する
4)プログラム終わり
この辺から向かってみてはいかがでしょうか?
ある程度考えてから(設計をしてから)、コードに向かわないと、
行き当たりばったりではいずれ破たんします。
サンプルファイルは明日アップできるかも。
マクロがどこまで書けるかはわかりませんが、
とりあえず表中の数式を入れたものをUpする予定かもです。
(まっつわん) 2019/10/04(金) 18:01
↑ダウンロードしてみてください。
マクロは作ってません。
まずは、数式の書き方、再利用しやすい値の作り方及びシートの見せ方を参考にしてみてください。
元来、エクセルは表計算ソフトなのだから、
その機能を全く捨てて全て自作するのは合理的ではないかなと思います。
背景の色なども基本1回設定してしまえば、
そんなにメンテナンスする必要があると思えないので、
手動でちゃちゃっと設定しておけばいいかと。。。
(まっつわん) 2019/10/05(土) 11:01
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.