• ベストアンサー

excel 当番表を作る

excelで当番表を作っています。 カレンダーの中に毎日「お昼当番」と「朝礼当番」を入れています。 「お昼当番」と「朝礼当番」のメンバーは若干違います。 7月  2日 3日 4日 5日 6日  A  B  C  D  E  C  B  A  C  B  9日 10日 11日 12日 13日  F  G  A  B  C  A  C  B  A  C ・・・・ このとき、3日や13日のように同じ人が当番が重なることがありますが これは避けたいと思っています。 いつもこのカレンダーの作成を行う際、 コピペを間違って誰かが途中抜けてしまったり、 同じ人が重なってしまうことを見落とすことがあります。 このようなカレンダーの作成を自動で行う方法はあるでしょうか? 難しいと思いますが、ご助力お願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • fmajin
  • ベストアンサー率61% (75/122)
回答No.3

原則として 「お昼当番」がA→B→C→D→E→F→G 「朝礼当番」がC→B→A という順番で繰り返すという感じでしょうか。ですが、3日や13日のように重複する日が出てしまうので、これを避けたいということですよね。 これを「自動的に行う」ということであれば、3日のような例外処理もあるので、VBAでプログラムを作成するという必要があるでしょう。こちらについては、諸条件を明確にしていく必要がありますので省略します。 ですので、もう少し手順を簡単にするという方向性でしょうか。 現在は、コピペで名前を入力しているみたいですが、もしかしたら「入力規則」を使って、選択リストから名前を選択入力するようにしたほうが便利かもしれません。 お昼当番などの欄を選択して[データ]→[入力規則]コマンドを利用し、[入力値の種類]を「リスト」にして、[元の値]欄に「A,B,C,…」のように名前をカンマで区切って入力します。するとセルを選択した際に、[▼]ボタンが表示され、このボタンから人名を選択入力できるようになります。これは、人名がどれだけ規則的に繰り返されるのかによって、コピペとどっちのほうが簡単なのか、変わってくるでしょう。 そして、No.1の方の回答にあるように、COUNTIFで回数を表示するようにしておくといいと思います。 もう1つの「重複チェック」に関しては、新たな行を設ける以外に、「条件付き書式」を利用する方法があると思います。 「2日」のセルがA1セルと仮定すると、下欄のCから始まる「朝礼当番」は、A3~D3に相当しますね。このセル範囲を選択しておいて、[書式]→[条件付き書式]コマンドを実行します。 ダイアログが表示されたら、[セルの値が」「次の値に等しい」「=A2」と設定します。最後の「=A2」は、ワークシート上の「A2」セルをクリックすると「=$A$2」となりますので、[F4]キーを3回押して「=A2」とします。 その後、[書式]ボタンをクリックして、表示されたダイアログの[パターン]パネルで好みのセルの色を設定してください。 [OK]ボタンをクリックしていってダイアログを閉じると、上の「お昼当番」と同じ人名の場合は、「朝礼当番」のセルに色が付いて判断できるようになります。このA3~D3をコピーして、9日からの週などの行にも[形式を選択して貼り付け]コマンドで「書式」だけを貼り付ければ、条件付き書式の設定をコピーすることができます。 どんな方法がやりやすいか、いろいろ試してみてください。

camerabook
質問者

お礼

ありがとうございます。 入力規則については使ったことがありますが、 今回の場合は逆に面倒くさいかもしれません。 重複チェックの方法は非常に参考になりました。 採用させていただきたいと思います!

その他の回答 (3)

noname#52504
noname#52504
回答No.4

数式で自動化するのも無理というほどではありませんが、 割に合うかどうかは微妙なところです。 Excelというソフトは質問文のような「折り返した表」の取り扱いが不得手なので、 まず、作業用のシート(Sheet2とします)でデータを作ります。 ●Sheet2について、 1.A列に日付を入力します(休日はあらかじめ抜いておく)  A  2日  3日  4日  ・  ・  ・ 2.B列に上段のリスト(お昼当番)のメンバーを一通り入力します。 3.C列に下段のリスト(朝礼当番)をメンバーを一通り入力します。   ※ココだけはご自分で重複を避けてください。  B C  A C  B A  C B  D  E  F  G 4.B列のメンバー全体を選択して下方にフィルします。  お昼当番が繰り返し表示されるハズです。 5.朝礼当番のリストに名前をつけます  挿入>名前>定義 で、名前:朝礼/参照範囲:=Sheet2!$C$1:$C$3 とする。  ※朝礼当番の人数によって範囲が変わってきますので注意してください。 6.C列の末尾のセルに下記の数式を配列数式として入力(Ctrl+Shift+Enter)して下方にフィルします。  =INDEX(朝礼,MATCH(SMALL(COUNTIF(C$1:C3,朝礼)+(朝礼=B4)*999,1),COUNTIF(C$1:C3,朝礼)+(朝礼=B4)*999,0))  ※C$1:C3の部分,B4の部分は朝礼当番の数によって変わります。  朝礼当番が、お昼当番との重複を避けて、これまでで最も回数が少ないものから表示されるハズです。 ●作成したデータをカレンダーに表示する。  ※あらかじめ日付が入力されているものとします。  ※B3セルが"2日"だったとします。 7.B4セル:=VLOOKUP(B3,Sheet2!$A$1:$C$999,2,0)    として、お昼当番の部分すべてにコピー 8.B5セル:=VLOOKUP(B3,Sheet2!$A$1:$C$999,3,0)    として、朝礼当番の部分すべてにコピー (Excel2003で動作確認済)

camerabook
質問者

お礼

excelは「折り返した表」の取り扱いが不得手ということ、 知りませんでした。 (何か方法があるのかと勝手に思っていました。) 予想以上に複雑な式が必要になるようですね・・ 次回の当番表作成まで少し時間があるので、それまでに勉強して 参考にさせていただきたいと思います。 ありがとうございました!

  • koko88okok
  • ベストアンサー率58% (3839/6543)
回答No.2

> コピペを間違って誰かが途中抜けてしまったり ユーザー定義のデータもオートフィルができますので、順番が決まっている場合は、記載漏れをなくすことができますよ。 「オートフィルって?」 http://www.nct9.ne.jp/poporu/11.html の最後の方をご参照ください。 重複をなくすには、#1の方のご回答がよいと思います。

camerabook
質問者

お礼

実はオートフィルも使おうとしたことがあるのですが、 今回の場合メンバーが重なっているけど順番が違う二つのグループがあるため オートフィルを登録したとき、1つのグループが自動で 選ばれて困ってしまいました。 (日本語が伝わりにくいでしょうか・・  しかしこれも何か方法があるのでしょうか?) アドバイスありがとうございました!

  • pamsd
  • ベストアンサー率18% (39/209)
回答No.1

自動で行うには、決まりが必要です。 どういう決まりで どの人にするのか・・・です。 それより 見落としを しないようにするほうが いいのでは? >コピペを間違って誰かが途中抜けてしまったり、 Aから順にGまで Aの人のセル =COUNTIF(A1:F7,"A") Bの人のセル =COUNTIF(A1:F7,"B") というように 誰が 何回 割り当てられたか 一目瞭然にする。 >同じ人が重なってしまうことを見落とすことがあります。 2日  A  C の下に =if(a2=a3,"","×") というように A2に入っている A と A3に入っている Cが 一緒なら ×を 表示して わかりやすくする。 こういう工夫をしたら チェック漏れは なくなるでしょう。

camerabook
質問者

お礼

>それより 見落としを しないようにするほうが いいのでは? 確かにそのとおりです。 カウントするという方法は全く思いつきませんでした。 採用させていただきます!ありがとうございました。

関連するQ&A

専門家に質問してみよう