[[20170121151519]] 『ゴミ当番表の作成』(しあわせブタ) >>BOT

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ゴミ当番表の作成』(しあわせブタ)

ゴミ当番表の作成

初めまして。
この度、会社でゴミ当番表を作成することになりました。
今までずっと手作業で作成していたのですが、いちいち作成するのが大変で1時間ぐらいかかってしまいます。
なので、エクセルで簡単に関数やマクロを使って作成しようと試みていますが、全く完成に近づいている気配がありません。
ルールが複雑すぎて、どんな風に関数を使っていいか混乱してしまっている状態です。

そこで皆様のご意見等などをうかがいたいと思った次第です。
まだExcelマクロの初心者なので、どなたかうまい方法を教えて下さい。

以下が作成条件になっています。

・人数は10〜20人(月によって変動してしまう)
 →また、営業社員・事務社員に分かれる(営業社員の方が多い)

・ゴミ当番の該当曜日は火・木・金・土(祝日は無し)

・土曜日に営業社員を割り振ってはいけない
 →もし、営業社員が土曜日になってしまったら、火曜日に割り振り、代わりに事務社員を割り振る。

※必ず全員にゴミ当番をさせます。翌月もまた最初の当番はリセットされず、続きの人から行います。

例 A〜Jは営業社員 K〜Qは事務社員とします。(これも月により変動してしまいます)
[A・B・C・D・E・F・G・H・I・J]
[K・L・M・N・O・P・Q]

火(A) 木(B) 金(C) 土(K) 火(D) 木(E) 金(F) 土(L) 火(G) 木(H) 金(I) 土(M) 火(J) 木(M) 金(N) 土(O) 火(P) 木(Q) 金(A) 土(K)……

といった感じになります。

どなたか良い知恵を持つ方、ご協力をお願いします。
宜しくお願いします。

< 使用 Excel:Excel2010、使用 OS:unknown >


>いちいち作成するのが大変で1時間ぐらいかかってしまいます。

ほむ、、、
とりあえず並べて、
だめなら目視で入れ替えればいいんじゃないのかなぁ。。。

  ┌──┬──┬───────┬─────┐
  │曜日│当番│土曜ダメな営業│替えの事務│
  ├──┼──┼───────┼─────┤
  │火  │a   │              │          │
  ├──┼──┼───────┼─────┤
  │木  │b   │              │          │
  ├──┼──┼───────┼─────┤
  │金  │c   │              │          │
  ├──┼──┼───────┼─────┤
  │土  │    │d             │k         │
  ├──┼──┼───────┼─────┤
  │火  │e   │              │          │
  ├──┼──┼───────┼─────┤
  │木  │f   │              │          │
  ├──┼──┼───────┼─────┤
  │金  │g   │              │          │
  ├──┼──┼───────┼─────┤
  │土  │h   │              │          │
  ├──┼──┼───────┼─────┤
  │火  │i   │              │          │
  ├──┼──┼───────┼─────┤
  │木  │j   │              │          │
  ├──┼──┼───────┼─────┤
  │金  │    │k             │d         │
  ├──┼──┼───────┼─────┤
  │土  │l   │              │          │
  ├──┼──┼───────┼─────┤
  │火  │m   │              │          │
  ├──┼──┼───────┼─────┤
  │木  │n   │              │          │
  ├──┼──┼───────┼─────┤
  │金  │o   │              │          │
  ├──┼──┼───────┼─────┤
  │土  │p   │              │          │
  ├──┼──┼───────┼─────┤
  │火  │q   │              │          │
  ├──┼──┼───────┼─────┤
  │木  │a   │              │          │
  ├──┼──┼───────┼─────┤
  │金  │b   │              │          │
  ├──┼──┼───────┼─────┤
  │土  │    │c             │l         │
  ├──┼──┼───────┼─────┤
  │火  │d   │              │          │
  ├──┼──┼───────┼─────┤
  │木  │e   │              │          │
  ├──┼──┼───────┼─────┤
  │金  │f   │              │          │
  ├──┼──┼───────┼─────┤
  │土  │g   │              │          │
  ├──┼──┼───────┼─────┤
  │火  │h   │              │          │
  ├──┼──┼───────┼─────┤
  │木  │i   │              │          │
  ├──┼──┼───────┼─────┤
  │金  │j   │              │          │
  ├──┼──┼───────┼─────┤
  │土  │k   │              │          │
  ├──┼──┼───────┼─────┤
  │火  │    │l             │c         │
  ├──┼──┼───────┼─────┤
  │木  │m   │              │          │
  ├──┼──┼───────┼─────┤
  │金  │n   │              │          │
  ├──┼──┼───────┼─────┤
  │土  │o   │              │          │
  ├──┼──┼───────┼─────┤
  │火  │p   │              │          │
  ├──┼──┼───────┼─────┤
  │木  │q   │              │          │
  ├──┼──┼───────┼─────┤
  │金  │a   │              │          │
  ├──┼──┼───────┼─────┤
  │土  │    │b             │m         │
  ├──┼──┼───────┼─────┤
  │火  │c   │              │          │
  ├──┼──┼───────┼─────┤
  │木  │d   │              │          │
  ├──┼──┼───────┼─────┤
  │金  │e   │              │          │
  ├──┼──┼───────┼─────┤
  │土  │f   │              │          │
  ├──┼──┼───────┼─────┤
  │火  │g   │              │          │
  ├──┼──┼───────┼─────┤
  │木  │h   │              │          │
  ├──┼──┼───────┼─────┤
  │金  │i   │              │          │
  ├──┼──┼───────┼─────┤
  │土  │j   │              │          │
  ├──┼──┼───────┼─────┤
  │火  │k   │              │          │
  ├──┼──┼───────┼─────┤
  │木  │l   │              │          │
  ├──┼──┼───────┼─────┤
  │金  │    │m             │b         │
  ├──┼──┼───────┼─────┤
  │土  │n   │              │          │
  ├──┼──┼───────┼─────┤
  │火  │o   │              │          │
  ├──┼──┼───────┼─────┤
  │木  │p   │              │          │
  ├──┼──┼───────┼─────┤
  │金  │q   │              │          │
  ├──┼──┼───────┼─────┤
  │土  │    │a             │          │
  ├──┼──┼───────┼─────┤
  │火  │b   │              │          │
  ├──┼──┼───────┼─────┤
  │木  │c   │              │          │
  ├──┼──┼───────┼─────┤
  │金  │d   │              │          │
  ├──┼──┼───────┼─────┤
  │土  │e   │              │          │
  ├──┼──┼───────┼─────┤
  │火  │f   │              │          │
  ├──┼──┼───────┼─────┤
  │木  │g   │              │          │
  ├──┼──┼───────┼─────┤
  │金  │h   │              │          │
  └──┴──┴───────┴─────┘

(まっつわん) 2017/01/21(土) 15:59


 >・ゴミ当番の該当曜日は火・木・金・土(祝日は無し) 
 「祝日は無し」の意味ですけど、
  ゴミ当番が無い? 
  祝日なんてものが無い?
 どっちですか?
  
 > →もし、営業社員が土曜日になってしまったら、火曜日に割り振り、代わりに事務社員を割り振る。
 その営業社員が翌週火曜に休みを取ると言ったらどうするんですか?
 そんな事態も考慮すると、個別社員の休暇予定表があってしかるべきと思うのですが、実際にありますか?

 >※必ず全員にゴミ当番をさせます。翌月もまた最初の当番はリセットされず、続きの人から行います。 
 リセットされないのは当然でしょうけど、すると前月までどんな実績だったのか分からないと
 今月分が作れないですよね?
 前月までのゴミ当番実績表のたぐいは簡単に(手で)作成できるんですか?

 >例 A〜Jは営業社員 K〜Qは事務社員とします。(これも月により変動してしまいます) 
 月により変動するとのことですが、そんなに都合よく月単位で変わるんですか?
 月の途中だって変動しませんか?
 そうだとすると、上述の休暇予定表に加えて、(ある日から)ゴミ当番をやり始める人と、
 (ある日から)もうやらない人の予定表も必要だと思われるんですが、私の考え過ぎですか?

(半平太) 2017/01/21(土) 20:39


 >しあわせブタ さん

 エクセルでサンプルを作成しました。ご所望なら、ファイルをupします。

 翌月分のゴミ当番表を毎月作成しているんですよね?

 半平太さんもおっしゃってますが、★「個別社員の休暇予定表」を作成すべきかと。
 それと、「毎月、第1,第3水曜日は1年を通して休みにしたい」と
 希望されている社員はいますか?年月日指定の休暇ではなく。

 >>・人数は10〜20人(月によって変動してしまう)
 変動してしまうのは、
 「既存社員が休みを取るから(出張なども含む)」
 「既存社員の退社」
 「新入社員が入社」
 が原因と考えて、よろしいですか?

(マリオ) 2017/01/22(日) 10:00


平等に割り振るのは、簡単そうに見えて、結構難しいですね。マクロでシートをDB扱いして処理してみた例なぞ。
前提条件として、まずシートは以下のようにレイアウトしてるものとします。

 [Sheet1]
	A		B
1	日付		担当
2	01/03(火)	A
3	01/05(木)	B
4	01/06(金)	C
5	01/07(土)	
6	01/10(火)	
7	01/12(木)	
8	01/13(金)	
9	01/14(土)	

 [Sheet2]
	A	B	C
1	担当	営	回
2	A	○	
3	B	○	
4	C	○	
5	D	○	
6	E	○	
7	F	○	
8	G	○	
9	H	○	
10	I	○	
11	J	○	
12	K		
13	L		
14	M		
15	N		
16	O		
17	P		
18	Q		

Sheet1のA:A列は、「セルの書式設定」で「mm/dd(aaa);@」とすることで、上記のように月日と曜日を表示できます。
Sheet1の1行目は、「データ」−「オートフィルタ」を掛けておくとよいでしょう。

更に、Sheet1のA:A列には、条件付き書式で「=OR(WEEKDAY(A1)<3,WEEKDAY(A1)=4)」だったなら文字色を灰色にでも変えるようにしておいてください。

Sheet1 には、「開発」−「挿入」から、ActiveXのコマンドボタンを選択し、貼っておきます。以下はそのボタン用のマクロになります。

 Private Sub CommandButton1_Click()
    Dim DIC As Object
    Dim CN As Object
    Dim RS As Object
    Dim strSQL As String
    Dim wk2 As Worksheet
    Dim i As Long

    Set wk2 = Sheets("Sheet2")
    Set DIC = CreateObject("Scripting.Dictionary")
    For i = 2 To wk2.Cells(wk2.Rows.Count, "A").End(xlUp).Row
        DIC.Add wk2.Cells(i, "A").Value, i
    Next i

    Set CN = CreateObject("ADODB.Connection")
    Set RS = CreateObject("ADODB.Recordset")
    CN.Provider = "Microsoft.ACE.OLEDB.12.0"
    CN.Properties("Extended Properties") = "Excel 12.0"
    CN.Open ThisWorkbook.FullName

    For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
        If Cells(i, "B").Value = "" Then
            If Weekday(Cells(i, "A").Value) = 7 Then
                strSQL = "SELECT 担当 FROM [Sheet2$] WHERE 営 is null ORDER BY 回,担当 ASC;"
            Else
                strSQL = "SELECT 担当 FROM [Sheet2$] ORDER BY 回,担当 ASC;"
            End If
            Set RS = CN.Execute(strSQL)
            Cells(i, "B").Value = Trim(RS.Fields("担当"))
            With wk2.Cells(DIC(Cells(i, "B").Value), "C")
                .Value = .Value + 1
            End With
        End If
    Next i

    Set RS = Nothing
    CN.Close
    Set CN = Nothing
 End Sub

以降、日付の追加の手順です。
・Sheet1の末尾に日付を2日分追加する(曜日は無視し、必ず1日違いにする)
・入力した2日分のセルを範囲選択後、マウスドラッグして、日付を追加。
・日月水は色が付いているはずなので、オートフィルタで着色行だけ表示。
・複数行選択後、行削除することで、必要な曜日だけ残す。
・オートフィルタを解除(全選択)。
・ボタンを押しマクロ実行すると、担当者欄が埋まる。
・担当者毎に都合が悪い日の場合、他の人と相談の上、手動で交換。
(???) 2017/01/23(月) 11:47


 テーマが似てるので、アゲておきます。

 『勤務表 当直5人ランダムしたいです、、助けてください、、』(SinNeo) 
[[20170202151355]]

 『勤務表 当直5人ランダムしたいです 別人』(トラ)
[[20170217080857]]
(通りすがり) 2017/02/18(土) 08:03

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.