プロが教えるわが家の防犯対策術!

画像のような表で
B3:L3に休と入ってる人を無視して
24列にトイレ掃除担当者を表示するローテーションを作る場合
VBAか関数でどのように入力すればいいか教えてください

順番はA3:A6の範囲 を A3→A4→A5→A6→A3とループすればokです
よろしくお願いします

「エクセルの当番表を作っていますが教えてく」の質問画像

質問者からの補足コメント

  • 回答ありがとうございます

    確認事項1に関して役割が重なるのはOKです

    確認事項2については画像が間違えてましたすみません

    1/24がAさんに戻る(Bさんが1回休み)方が正しいです
    よろしくお願いします

    「エクセルの当番表を作っていますが教えてく」の補足画像1
    No.1の回答に寄せられた補足コメントです。 補足日時:2023/01/06 13:33

A 回答 (4件)

No.3です。


前回回答の文章に誤りがありました。訂正してお詫びいたします。

(誤)全員一斉に「休」となることはという事態は発生しないという前提です。
(正)全員一斉に「休」となるという事態は発生しないという前提です。
    • good
    • 0

t_fumiakiさんが、VBAを投稿されたので、関数による回答を投稿します。



26行目を作業用の行として使用しますので、目障りなら文字色を白にするとか、行自体を非表示にするなどの対応をお願いします。

また、Aさん、Bさん、Cさん、Dさんは、それぞれ「休」となることはあるが、同日に「休」となるのは最大3人までとし、全員一斉に「休」となることはという事態は発生しないという前提です。

まず、B24セルから「トイレ掃除」の表示がスタートしますが、誰からスタートするのかを決めなくてはいけません。
ご質問者の指定はA3セルから、つまり「Aさん」からスタートすることになっています。ここで、A3~A6セルに順番をつけA3=1番、A4=2番、A5=3番、A6=4番とすることにします。

添付画像をご覧ください。

A26セルに「誰からスタートするかを決めたとき、その一つ前の順番の人」の番号を入れます。
つまり、A3セル(Aさん)からスタートするなら、その一つ前の順番の人はA6セル(Dさん)ですので「4」を入力します。
続いてB26セルに、

=IF(INDEX(B$3:B$6,MOD(A26,4)+1)<>"休",MOD(A26,4)+1,IF(INDEX(B$3:B$6,MOD(A26+1,4)+1)<>"休",MOD(A26+1,4)+1,IF(INDEX(B$3:B$6,MOD(A26+2,4)+1)<>"休",MOD(A26+2,4)+1,MOD(A26+3,4)+1)))

という数式を記述し、右方向へオーフィル等で最終列までコピーします。
次にB24セルに、

=INDEX($A$3:$A$6,B26)

という数式を記述し、右方向へオーフィル等で最終列までコピーします。

これで、ご希望の結果が表示されると思います。

VBAの代わりを数式でやろうとしているので、長い数式にななってしまいますが、「休」が変更になったり、後から追加したりしたとき、イベントと連動させないVBAだと再実行しなければいけませんが、数式なら自動的に再計算され表示が修正されるというメリットはあります。
「エクセルの当番表を作っていますが教えてく」の回答画像3
    • good
    • 0

1回だけvbaで答を書きます。


コードの意味は、調べて下さい。
このサイトは半角字下げが出来ないので、全角字下げしてます。
プログラムでは全角を半角スペースに置き替えてね。

Dim WS1 As Worksheet

Set WS1 = Worksheets("Sheet1")
Cnt3 = 2

For Cnt1 = 2 To 12
 For Cnt2 = 1 To 4
 Cnt3 = Cnt3 + 1
  If Cnt3 = 7 Then
   Cnt3 = 3
  End If
  If WS1.Cells(Cnt3, Cnt1).Value <> "休" Then
   WS1.Cells(24, Cnt1).Value = WS1.Cells(Cnt3, 1).Value
   Exit For
  End If
 Next Cnt2
Next Cnt1
    • good
    • 0

確認事項1


鍵当番と重なるのはOK?(っぽい!)
確認事項2
1/22にBさんが休みだから飛ばすのは理解できる。
1/24がBさんになっているのはそのため?
それならば次の日(25日)はAさんの当番にしなくてもよいのでしょうか?
多分、例のループの方が簡単な気がしますが、一応確認です。
本当は1/24がAさんに戻る(本当にBさんが1回休み)の方がもっと簡単。
この回答への補足あり
    • good
    • 0

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

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


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