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日のように同じ人が当番が重なることがありますが
これは避けたいと思っています。

いつもこのカレンダーの作成を行う際、
コピペを間違って誰かが途中抜けてしまったり、
同じ人が重なってしまうことを見落とすことがあります。
このようなカレンダーの作成を自動で行う方法はあるでしょうか?
難しいと思いますが、ご助力お願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

原則として


「お昼当番」が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日からの週などの行にも[形式を選択して貼り付け]コマンドで「書式」だけを貼り付ければ、条件付き書式の設定をコピーすることができます。

どんな方法がやりやすいか、いろいろ試してみてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/07/31 22:28

数式で自動化するのも無理というほどではありませんが、


割に合うかどうかは微妙なところです。

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で動作確認済)
    • good
    • 0
この回答へのお礼

excelは「折り返した表」の取り扱いが不得手ということ、
知りませんでした。
(何か方法があるのかと勝手に思っていました。)
予想以上に複雑な式が必要になるようですね・・

次回の当番表作成まで少し時間があるので、それまでに勉強して
参考にさせていただきたいと思います。

ありがとうございました!

お礼日時:2007/07/31 22:26

> コピペを間違って誰かが途中抜けてしまったり



ユーザー定義のデータもオートフィルができますので、順番が決まっている場合は、記載漏れをなくすことができますよ。

「オートフィルって?」
http://www.nct9.ne.jp/poporu/11.html

の最後の方をご参照ください。

重複をなくすには、#1の方のご回答がよいと思います。
    • good
    • 0
この回答へのお礼

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

アドバイスありがとうございました!

お礼日時:2007/07/31 22:31

自動で行うには、決まりが必要です。


どういう決まりで どの人にするのか・・・です。

それより
見落としを しないようにするほうが いいのでは?

>コピペを間違って誰かが途中抜けてしまったり、
Aから順にGまで
Aの人のセル
=COUNTIF(A1:F7,"A")

Bの人のセル
=COUNTIF(A1:F7,"B")

というように 誰が 何回 割り当てられたか 一目瞭然にする。

>同じ人が重なってしまうことを見落とすことがあります。
2日
 A
 C
の下に
=if(a2=a3,"","×")
というように A2に入っている A と A3に入っている Cが 一緒なら
×を 表示して わかりやすくする。

こういう工夫をしたら チェック漏れは なくなるでしょう。
    • good
    • 0
この回答へのお礼

>それより
見落としを しないようにするほうが いいのでは?

確かにそのとおりです。

カウントするという方法は全く思いつきませんでした。
採用させていただきます!ありがとうございました。

お礼日時:2007/07/31 22:33

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルについてなのですが、 例えば指定の範囲内に A B B C A B C A B B C D

エクセルについてなのですが、

例えば指定の範囲内に
A B B C A B C A B B C D B D
と並んだセルからAとDの合計を出したい時はどのようにすればいいのですか?

COUNTIFSだったら複数条件を満たした数を表示するので希望とは違います。
希望はA or Dの合計を出したいのです。

Aベストアンサー

こんにちは!

COUNTIFS関数はAND条件になりますので、今回の質問には適しません。

=COUNTIF(範囲,"A")+COUNTIF(範囲,"D")
のように「A」のセル数と「D」のセル数をコツコツと足し算するのが
間違いないと思います。m(_ _)m

QExcel2013 VBA A列とB列の文字をA列とB列とC列に移動させる方法

A列とB列に文字が入っているのですが、下記のようにA列とB列とC列に文字を移動させたいです。
(A列の数字は必ず奇数のA列に入っています。)
VBAのコードを教えて下さい。

例えば
A1 1  B1 cat
A2 空白 B2 猫
A3 空白 B3 dog
A4 空白 B4 犬
A5 2  B5 whale
A6 空白 B6 クジラ
A7 3  B7 rabbit
A8 空白 B8 ウサギ

とデータがある場合

A1 1  B1 cat  C1 猫
A2 空白 B2 dog  C2 犬
A3 2  B3 whale  C3 クジラ
A4 3  B4 rabbit C4 ウサギ

としたいです。

実際、データは、A5196まであります。

Aベストアンサー

No.1です。

>実際、データは、A5196まであります。

前回のコードは一つずつカット&ペーストしていますので
かなりの時間を要すると思います。
↓のコードに変更してみてください。

Sub Sample2()
Dim lastRow As Long
lastRow = Cells(Rows.Count, "B").End(xlUp).Row
Application.ScreenUpdating = False
With Range(Cells(1, "C"), Cells(lastRow, "C"))
.Formula = "=IF(MOD(ROW(),2)=1,B2,"""")"
.Value = .Value
.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
Application.ScreenUpdating = True
MsgBox "完了"
End Sub

少しは短縮できると思います。m(_ _)m

No.1です。

>実際、データは、A5196まであります。

前回のコードは一つずつカット&ペーストしていますので
かなりの時間を要すると思います。
↓のコードに変更してみてください。

Sub Sample2()
Dim lastRow As Long
lastRow = Cells(Rows.Count, "B").End(xlUp).Row
Application.ScreenUpdating = False
With Range(Cells(1, "C"), Cells(lastRow, "C"))
.Formula = "=IF(MOD(ROW(),2)=1,B2,"""")"
.Value = .Value
.SpecialCells(xlCellTypeB...続きを読む

Q例えば、AさんからGさんまでがA列に縦に並んでいてB列に数字が入っています。B列にある数字の合計をA

例えば、AさんからGさんまでがA列に縦に並んでいてB列に数字が入っています。B列にある数字の合計をA-Gさん別々に出したいんですが簡単なvbaの記述方法はないでしょうか?
お願いします。

Aベストアンサー

こんばんは!

A列のA~Gさんは複数存在しているのでしょうか?
そうであればSUMIF関数で対応できると思いますが、VBAをお望みだというコトですので
一例です。

元データはSheet1にあり、Sheet2に表示するとします。
尚、Sheet1の1行目は項目行でデータは2行目以降にあるという前提です。
標準モジュールにしてください。

Sub Sample1()
Dim lastRow As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
wS.Cells.ClearContents
With Worksheets("Sheet1")
.Range("A:A").AdvancedFilter Action:=xlFilterCopy, copytorange:=wS.Range("A1"), unique:=True
lastRow = wS.Cells(Rows.Count, "A").End(xlUp).Row
With Range(wS.Cells(2, "B"), wS.Cells(lastRow, "B"))
.Formula = "=SUMIF(Sheet1!A:A,A2,Sheet1!B:B)"
.Value = .Value
End With
End With
End Sub

こんな感じではどうでしょうか?m(_ _)m

こんばんは!

A列のA~Gさんは複数存在しているのでしょうか?
そうであればSUMIF関数で対応できると思いますが、VBAをお望みだというコトですので
一例です。

元データはSheet1にあり、Sheet2に表示するとします。
尚、Sheet1の1行目は項目行でデータは2行目以降にあるという前提です。
標準モジュールにしてください。

Sub Sample1()
Dim lastRow As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
wS.Cells.ClearContents
With Worksheets("Sheet1")
.Range("A:A...続きを読む

QEXCELで(□Aー□B)ですが!□の中にAとBを入れたいのですが

EXCELで(□Aー□B)ですが!□の中にAとBを入れたいのですができるのでしょうか?
 図形の□のテキストボックスに文字11ポイントを入力しましが□が大きすぎて()のバランスが
 とても悪いです。
 □の中に入ったA、Bネットで検索しましたが、見当たりませんでした。
  あるサイトのPDFをプリントアウトしました紙面には確かにPDFですがちゃんと□の中にA、Bが入っています。
※ワードの囲い文字の案もあるのですが、それは後で試すとします。
※外字エデタはも後で試します。
 以上ほか何か方法はございませんか!?
以上よろしくお願いいたします。

Aベストアンサー

Office2010より・・・
挿入→テキストボックス→横書きを選択し、テキストボックスを作ります。
「Ctrl」キーを押した状態でテキストボックスの枠の部分をマウスの左ボタンを押したまま適当な場所へずらすとボックスがもう一つコピーされます。
それぞれ「A」「B」をボックス内に入力後、「Shift」キーを押して二つクリック
ボックスの枠の部分で右クリック→「オブジェクトの書式設定」を選択→右メニュー?の「テキストボックス」をクリック→「垂直方向の配置▼」から「中央」を選択し書式設定画面を閉じます。
ボックスの大きさを変更しても常にボックスの中央に文字が配置されます。

QA1にデータがある場合、A1とB1とC1が等しいか?

エクセルで、タイトルのことを確認したいです。
どうすればよろしいでしょうか?

Aベストアンサー

>まずA1にデータがあるかどうかを判断した上で

普通にIF関数でいいと思いますけど…

=IF(A1="","",AND(A1=B1,B1=C1))


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

このカテゴリの人気Q&Aランキング

おすすめ情報