秘密基地、どこに作った?

エクセル 当番表の作り方

エクセルで土日祝日を除いた、平日のみの当番表を作りたいです。

カレンダーまでは作成して、土日祝日の削除も行いましたが、当番表のローテーションを自動で入力する方法で詰まりました。

添付した画像のような感じで作成したいです。

また、次の月に変えた時に前の月の続きで表示されるようにしたいです。

わかりにくくてすみませんが、よろしくお願いしますm(_ _)m

「エクセル 当番表の作り方 エクセルで土日」の質問画像

A 回答 (9件)

No7です。


日付の設定で誤りがありました。下記が正しいです。(添付資料参照)
B2に1、C2に2と入力し、2つのセルを同時に選択します。そして、そのまま右へオートフィルでコピーします。
上記のようにしてください。
「エクセル 当番表の作り方 エクセルで土日」の回答画像8
    • good
    • 0
この回答へのお礼

お返事が大変遅くなり申し訳ありません。
教えていただいたマクロで無事に作成することができました!
ありがとうございましたm(_ _)m

お礼日時:2018/04/20 15:53

#No1・No3・No4です。



> 日付を検索値にするということは、月ごとにローテーションを作り直す
> ということでしょうか?
いいえ。そんなこと一度も書いてませんよね?

縦1列に土日祝日を除いた日付の表を作る
その横にローテーションを循環で並べる
指定月のデータだけ一覧表に表示させる

これだけです。

縦1列の日付データから カレンダーにデータを表示させるのは
VLOOKUPでも INDEX/MATCHでも SUMIFでできますね?

> カレンダーの作り方はもちろんわかるのですが
と書いてますからカレンダーは作れるんですよね?

次月になったらカレンダーを切り替えるだけですよ。
    • good
    • 2

まず表の作り方ですが、


A1のセルの書式設定を ####"年" にしてください。(添付図参照)
B1のセルの書式設定を ##"月" にしてください。
これで、2018を入力すると2018年と表示されます。(月も同様です)
マクロでは2018の数値だけ使用するのでこのようにします。

次に日付ですが
B1に1、B2に2と入力し、2つのセルを同時に選択します。そして、そのまま右へオートフィルでコピーします。
そうすると、1から31の数字が作成されます。

次に曜日ですが、
B3へ
=TEXT(DATE($A$1,$B$1,B$2),"aaa")
と入力し、オートフィルで右へコピーします。そうすると曜日が作成されます。(例え4月でも、31日分まで作成してください)

次に祭日ですが、4月の場合30日が祭日なので、4行目の30日に該当するセルに○を入れてください。
(○でなくても構いません。そのセルが空欄でないならマクロは祭日であると判定します)

その他の見出し(固定文字を作成してください)
A10:D17の表は、マクロ実行時は必要ありませんのでなくても構いませんが、
ローテーションの確認の為にあなたが必要とするなら、その表も作成しておいてください。

以上で、準備が完了です。
以下のマクロを標準モジュールに登録してください。
--------------------------------------------------------
Option Explicit

Public Sub ローテーション作成()
Dim six As Long
Dim lastday As Long
Dim person As Variant
Dim col As Long
Dim dd As Long
person = Array("A", "B", "C", "D", "A2", "B", "C", "D", "A", "B", "C", "D", "A3", "B", "C", "D")
six = Cells(1, "D").Value
If six < 1 Or six > 16 Then
MsgBox ("開始番号不正")
End If
'配列は0~15なので0始まりに変える
six = six - 1
'月末日算出
lastday = Day(DateSerial(Cells(1, "A").Value, Cells(1, "B").Value + 1, 1) - 1)
'1日~月末日まで繰り返す
For dd = 1 To lastday
'日対応のカラム位置を取得
col = dd + 1
'土、日、祭日は空白を設定
If Cells(3, col).Value = "土" Or Cells(3, col).Value = "日" Or Cells(4, col).Value <> "" Then
Cells(5, col).Value = ""
Cells(6, col).Value = ""
Else
'以外はローテーションを設定
Cells(5, col).Value = person(six)
Cells(6, col).Value = six + 1
six = six + 1
If six > UBound(person) Then six = 0
End If
Next
MsgBox ("設定完了")
End Sub
----------------------------------------------------------------
マクロ実行時は、このシートを表示した状態で、「表示」タブからマクロを選択し
「ローテーション作成」を実行してください。
「エクセル 当番表の作り方 エクセルで土日」の回答画像7
    • good
    • 0

No5です。


提示された画像のローテーションが正しいなら、こちらで添付した画像のようなローテーションになるかと思います。
ローテーションの割り当てを実施時(マクロ実行時)に、D1へ開始番号を指定するのはいかがでしょうか。
例では15が指定されているので、Cから割り当てられます。
月末日の番号も表示されるので、次の月は、月末日の番号+1をD1へ指定します。(16の次は1に戻ります)
マクロで設定されるのは、青色の部分のみです。
もし、これでよければ、表の作成の方法(日付、曜日等)を更に提示します。(1回だけ作成すれば次の月はB1とD1を変えるだけです)
「エクセル 当番表の作り方 エクセルで土日」の回答画像6
    • good
    • 0
この回答へのお礼

回答ありがとうございますm(_ _)m

それで大丈夫です!
よろしくお願いします!!

お礼日時:2018/03/29 12:57

No2です。

補足ありがとうございました。
>①別です
>人というか、係なのですが、Aという係が3つあるためその形にしました。
>ローテーションは「A→B→C→D」です。
了解しました。

念のため確認ですが、
ローテーションを全部書くと、
「A→B→C→D→A2→B→C→D→A3→B→C→D」となります
と述べていますが、

提示された表のローテーションは
A→B→C→D→
A2→B→C→D→
A→B→C→D→
A3→B→C→D→
A→B→C→D→
A2→B→C→D→
となっています。つまり、A,A2,A3のなかでAだけが多いのです。(Aは4週間に2回、A2は4週間に1回、A3は4週間に1回です)
どちらが正しいのでしょうか?


>②増えることはないです。
了解しました。
念のため確認ですが、BについてB3,B3が増えることはありますか?(C,Dについても同様)
    • good
    • 1
この回答へのお礼

回答ありがとうございますm(_ _)m

すみません
勘違いしてました(・・;)
表が正しいので、tatsu99様が記載していただいた通りになります。

A以外が増えることはありません

お礼日時:2018/03/29 11:15

#No1・No3です。



> ローテーションにはなるのですが、これだと月を変えても、前の月の続
> きからとはならないと思うのですが...
何故???

縦一列に土日祝日を除いた日付を並べる
その横にローテーションを循環で並べる

後は 月を指定して表示される一覧表を作って 日付を検索値にして
担当者を検索/表示させる

ですよね。月がどうとか関係ないと思いますが。
    • good
    • 0
この回答へのお礼

度々の回答ありがとうございますm(_ _)m

理解しておらず申し訳ないのですが、
日付を検索値にするということは、月ごとにローテーションを作り直すということでしょうか?

お礼日時:2018/03/29 10:40

#No1です。



> 縦一列で作成した場合の当番のローテーションの関数は
> どうなるのでしょうか?
ローテーションの表も縦一列に作って MOD関数で循環させ
ればいいだけです。ローテーションについての説明がありま
せんので 具体的な回答はできかねますが

A1:A10にローテーションを作っているなら
=INDEX(A:A,MOD(ROW(A1)-1,10)+1)
で縦に循環するはずです。
    • good
    • 0
この回答へのお礼

回答ありがとうございますm(_ _)m
ローテーションにはなるのですが、これだと月を変えても、前の月の続きからとはならないと思うのですが...

ローテーションを全部書くと、
「A→B→C→D→A2→B→C→D→A3→B→C→D」となります

お礼日時:2018/03/29 10:08

割り当てる順番が不明なのですが、


①AとA2とA3は別のひとですか?
なぜ、A2、A3だけ不規則に割り当てられるのですか?

②横の列は提示例では、Dさん迄ですがもっと右側にEさん,Fさん・・・・がくることもあり得るのですか?
    • good
    • 0
この回答へのお礼

回答ありがとうございますm(_ _)m
①別です
人というか、係なのですが、Aという係が3つあるためその形にしました。
ローテーションは「A→B→C→D」です。

②増えることはないです。

お礼日時:2018/03/29 09:50

> 土日祝日の削除も行いましたが


この表で祝日はどう削除するのですか?

というか………表の作り方を見直した方がいいのでは?

縦一列のカレンダーを作って そこに当番表を作成し そこから今の
表に検索系の関数で表示させればいいかと思います。

WORKDAY関数を使えば いちいち手作業で土日祝日を消す必要も
ないように思いますけど。
    • good
    • 0
この回答へのお礼

回答ありがとうございますm(_ _)m

手抜きで、今添付した画像は関数も何も入れてない状態なので、土日を消しただけのものです。

縦一列で作成した場合の当番のローテーションの関数はどうなるのでしょうか?
カレンダーの作り方はもちろんわかるのですが、ローテーションが作成できないのです。

お礼日時:2018/03/28 16:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A