親子におすすめの新型プラネタリウムとは?

いつもお世話になっております。

エクセルで掃除の当番表を作成したく知識を借りたいです。

9人を毎月ランダムで当番決めしたいです。
図の”●”が当番担当者を示しています。
この”●”をランダムで入れたいのです。

参考にできそうなサイトも見つけられませんでした。

どなたか参考になりそうなサイトや方法わかる方いましたら
宜しくお願い致します。

「【Excel】ランダムで良いのが見つかり」の質問画像

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

A 回答 (3件)

大分苦労しましたがやっと出来上がりました。

次のようにすればよいでしょう。
毎月ごとに当番を組みなおしている場合には当番に偏りが出ることが考えられますので、また、ランダムなデータはシートにデータなどの入力などの操作が有った場合には組み合わせが変わってしまいます。そこで作業用のシート(シート2)に当番を決めるために必要なデータをランダム操作で並べたのちにそのシートをコピーして値として別のシート(シート3)に貼り付けます。それによってシート上に新たな入力が行われても組み合わせが変わらなくなりますのでその別のシートを元にお求めのシート(シート1)を作成することにします。
シート1ではA1セルに日にちと入力し、B1セルには8月1日からの日付にするのでしたら2012/8/1と入力します。
C1セルには次の式を入力して右横方向にドラッグコピーします。

=IF(B1="","",IF(MONTH(B1+1)=MONTH($B$1),B1+1,""))

これでその月の月末の日付までが表示されます。
次にB1からAF1セルを選択して右クリックして「セルの書式設定」から「表示形式」の「ユーザー定義」で d"日"とします。これで1日、2日・・のように表示されますね。
A2セルには曜日と入力し、B2セルには次の式を入力して右横方向にドラッグコピーします。

=IF(B1="","",TEXT(B1,"aaa"))

A3セルから下方には氏名を入力します。必ず入力してから次のシート操作に移ってください。氏名は暫定的な入力で構いません。
シート2ではA1セルには例えば2012/8/1のように日付を入力して右横方向にドラッグします。数か月分を表示するようにしても構いません。
A2セルには次の式を入力して横方向にドラッグコピーしたのちに下方にもドラッグコピーします。

=IF(ROW(A1)>COUNTA(Sheet1!$A$3:$A$100),"",IF(COLUMN(A1)=1,IF(ROW(A1)=1,"●",RAND()), IF(COLUMN(A1)<COUNTA(Sheet1!$A$3:$A$100),IF(COUNTIF($A2:OFFSET(A2,0,-1),"●")>0,"",IF(OFFSET(A2,0,-1)=MAX(OFFSET(A$2,0,-1):OFFSET(A$2,100,-1)),"●",RAND())),IF(COLUMN(A1)=COUNTA(Sheet1!$A$3:$A$100),IF(OR(OFFSET(A2,0,-1)="",OFFSET(A2,0,-1)="●"),RAND(),"●"), IF(MOD(COLUMN(A1)-1,COUNTA(Sheet1!$A$3:$A$98))+1=1,IF(OFFSET(A2,0,-1)=MAX(OFFSET(A$2,0,-1):OFFSET(A$2,100,-1)),"●",RAND()),IF(MOD(COLUMN(A1)-1,COUNTA(Sheet1!$A$3:$A$100))+1<COUNTA(Sheet1!$A$3:$A$100),IF(COUNTIF(OFFSET(A2,0,-MOD(COLUMN(A1)-1,COUNTA(Sheet1!$A$3:$A$100))):OFFSET(A2,0,-1),"●")>0,"",IF(AND(OFFSET(A2,0,-1)<>"",OFFSET(A2,0,-1)=MAX(OFFSET(A$2,0,-1):OFFSET(A$2,100,-1))),"●",RAND())),IF(MOD(COLUMN(A1)-1,COUNTA(Sheet1!$A$3:$A$100))+1=COUNTA(Sheet1!$A$3:$A$100),IF(OR(OFFSET(A2,0,-1)="",OFFSET(A2,0,-1)="●"),RAND(),"●"))))))))

その後にシート2全体を選択して「コピー」し、次にシート3を選択します。シート3のA1セルを選択したのちに「形式を選択して貼り付け」から「値」にチェックをして貼り付けます。
これによてランダムな配置が変化することのないシートが完成します。このシートを元にシート1の表を次の操作によって完成します。
シート1のB3セルには次の式を入力して右横方向にドラッグコピーしたのちに下方向にもドラッグコピーします。

=IF(OR(B$1="",$A3=""),"",IF(INDEX(Sheet3!$A$2:$XX$100,ROW(A1),MATCH(B$1,Sheet3!$1:$1,0))="●","●",""))

シート3の1行目に表示されている日付に基づいた組み合わせが表示されることになります。
同じ組み合わせのままで良ければ、シート3にシート1に合致する日付が無くともシート3の1行目の日付を手動で変えることによって対応することができます。
    • good
    • 0
この回答へのお礼

こんな質問に熱くご回答してくださり
ありがとうございました!
とても助かりました。

お礼日時:2012/08/14 16:13

 当番日そのものを完全にランダムにしますと、当番となる日数が人によって異なって来てしまいますので、掃除当番を行う順番をランダムに決まる様にされては如何でしょうか?(この方法でも月の変わり目で、当番を行う日数に差が生じてしまう恐れがありますが)



 今仮に、Sheet2のA列とB列を作業列として使用して、Sheet1に当番表を作成するものとします。
 まず、Sheet2のA5セルに次の数式を入力して下さい。

=IF(INDEX(Sheet1!$A:$A,ROW())="","",RAND())

 次に、Sheet2のB5セルに次の数式を入力して下さい。

=IF(ISNUMBER($A5),RANK($A5,$A:$A),"")

 次に、Sheet2のA5~B5の範囲をコピーして、同じ列の6行目以下に貼り付けて下さい。

 次に、Sheet1の
B1セルに  年
D1セルに  月掃除当番表
A3セルに  日付
A4セルに  曜日
と入力して下さい。
 次に、Sheet1のB3セルに次の数式を入力して下さい。

=IF(ISNUMBER(($A$1&"/"&$C$1&"/"&COLUMNS($B:B))+0),IF(MONTH(($A$1&"/"&$C$1&"/"&COLUMNS($B:B))+0)=$C$1,($A$1&"/"&$C$1&"/"&COLUMNS($B:B))+0,""),"")

 次に、Sheet1のB3セルをコピーして、Sheet1のB3~AF4の範囲に貼り付けて下さい。
 次に、以下の操作を行って下さい。

Sheet1のB3セルにカーソルを合わせて、マウスを右クリック
  ↓
現れた選択肢の中にある[セルの書式設定]をクリック
  ↓
現れた「セルの書式設定」ダイアログボックスの[表示形式]タブをクリック
  ↓
現れた「分類」欄の中にある[ユーザー定義]をクリック
  ↓
現れた「種類」欄に

d

と入力
  ↓
「セルの書式設定」ダイアログボックスの[OK]ボタンをクリック
  ↓
Sheet1のB4セルにカーソルを合わせて、マウスを右クリック
  ↓
現れた選択肢の中にある[セルの書式設定]をクリック
  ↓
現れた「セルの書式設定」ダイアログボックスの[表示形式]タブをクリック
  ↓
現れた「分類」欄の中にある[ユーザー定義]をクリック
  ↓
現れた「種類」欄に

aaa

と入力
  ↓
「セルの書式設定」ダイアログボックスの[OK]ボタンをクリック

 次に、Sheet1のB5セルに次の数式を入力して下さい。

=IF(AND(INDEX($3:$3,COLUMN())<>"",MOD(COLUMN()-COLUMN($B$3),COUNT(Sheet2!$B:$B))+1=INDEX(Sheet2!$B:$B,ROW())),"●","")

 次に、Sheet1のB5セルをコピーして、Sheet1のC5~AF5の範囲に貼り付けて下さい。
 次に、Sheet1のB5~AF5の範囲をコピーして、同じ列の6行目以下に貼り付けて下さい。

 後は、Sheet1のA5以下に各当番担当者の名前を入力してから、A1セルに西暦年、C1セルに月を入力しますと、当番準がランダムに決められた当番表が表示されます。

 尚、この方法では、何処かのセルに入力を行ったり、ファイルを開き直したり、F9キーを押したりする度に当番表が自動的に書き換わってしまいます。
 これを防ぐためには、Excelの「計算方法の設定」を[手動]とされた上で、[ブックの保存前に再計算を行う]という箇所のチェックを外して下さい。
 そして、「計算方法の設定」を[手動]とした場合において、表を変更する等のために再計算を行うためには、F9キーを押せば再計算が行われます。
「【Excel】ランダムで良いのが見つかり」の回答画像2
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ありません!
とても丁寧にご回答してくださり
ありがとうございました。
この手順でやっていったら出来ました!
本当にありがとうございました。

お礼日時:2012/08/14 16:11

9人で31日を掃除交番するとなると


1人3回その他4人が4回になるようですね。

こういった交番は斜め交番で
右上がりとかその逆でよく設定しますよね。

そんな単純だと駄目でしょうかね?

その他参考までに
一つ●箇所をコピーして●を入れたい
セル一つ一つをCtrl+クリックして
最後に貼付けすれば一度で全部埋められますよ。

そういったことではない!?かな?
    • good
    • 0
この回答へのお礼

そういった方法をとるのも一つの手でした。
私の質問内容が不十分で申し訳ありませんでした。

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

お礼日時:2012/08/14 16:14

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

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

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

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

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

Qエクセルで当番表をつくりたいのですが、簡単な関数を使ってできません。私

エクセルで当番表をつくりたいのですが、簡単な関数を使ってできません。私のレベルは中級くらいです。当番表の内容は、21名がそれぞれ所有する田んぼの面積に応じて田んぼの水を入れる当番です。当番は二人一組で、行います。面積の広い人は、回数が多く、少ない人は回数が少なくあたるようにします。公平なものにならなくてはいけません。3~4か月間の毎日です。同じ面積の人も10名位いるので、私は、全体面積に対する割合を出して、間隔日数を出す。後・・それぞれの割当たる間隔日数を崩さずに当たるようにする。・・・などあるのですが、・・私には、難しいので、どうかそんなの簡単だと思われる方は、至急回答お願いします。できたら、私でも理解しやすい表現で回答いただけたら、うれしいです。よろしくお願いします。

Aベストアンサー

#4です。以下貼り付けください。
Sub Toban()
Dim Ws1 As Worksheet, Ws2 As Worksheet, Ws3 As Worksheet, Rng As Range
Dim r As Integer, c As Integer, p As Long, q As Long
Set Ws1 = Worksheets("Sheet1")
Set Ws2 = Worksheets("Sheet2")
Set Ws3 = Worksheets("Sheet3")
Ws1.Select
Set Rng = Cells(1, 1).CurrentRegion
With Rng
.Copy
.PasteSpecial Paste:=xlPasteValues
.Sort _
Key1:=Cells(1, 3), _
Order1:=xlDescending, _
Header:=xlNo, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom, _
Sortmethod:=xlPinYin
End With
For r = 1 To 21
For c = 1 To Cells(r, 3)
Cells(r, c + 3).Value = Cells(r, 1) & c
Next c
Next r
Ws2.Select
Dim Hiduke As Date
Hiduke = InputBox("開始日入力。yyyy/m/d")
q = 0
For p = 0 To 178 Step 2
Range(Cells(1 + p, 1), Cells(2 + p, 1)).Value = Hiduke + q
q = q + 1
Next p
q = Ws1.Cells(1, Columns.Count).End(xlToLeft).Column
For p = 4 To q
Range(Ws1.Cells(1, p), Ws1.Cells(Rows.Count, p).End(xlUp)).Copy
Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteAll
Next p
Cells(1, 2).Delete
Set Rng = Cells(1, 1).CurrentRegion
For p = 0 To 89
Cells(p + 1, 4).Value = Cells(1, 1) + p
Cells(p + 1, 5).Value = Application.WorksheetFunction.VLookup(Cells(p + 1, 4), Rng, 2, 0)
Cells(p + 1, 6).Value = Application.WorksheetFunction.VLookup(Cells(p + 1, 4), Rng, 2, 1)
Next p
Set Rng = Cells(1, 4).CurrentRegion
Range(Cells(1, 4), Cells(1, 4).End(xlDown)).Copy Ws3.Cells(3, 1)
Range(Ws1.Cells(1, 1), Ws1.Cells(21, 2)).Copy
Ws3.Cells(1, 2).PasteSpecial Transpose:=True
Ws3.Select
Range(Columns(2), Columns(22)).ColumnWidth = 6
Dim Ret As Integer
For r = 1 To 90
For c = 5 To 6
Ret = Application.WorksheetFunction.Match(Left(Ws2.Cells(r, c), 1), Ws3.Rows(1), 0)
With Ws3.Cells(r + 2, Ret)
.Value = "■"
.HorizontalAlignment = xlCenter
End With
Next c
Next r
Set Ws1 = Nothing
Set Ws2 = Nothing
Set Ws3 = Nothing
End Sub

#4です。以下貼り付けください。
Sub Toban()
Dim Ws1 As Worksheet, Ws2 As Worksheet, Ws3 As Worksheet, Rng As Range
Dim r As Integer, c As Integer, p As Long, q As Long
Set Ws1 = Worksheets("Sheet1")
Set Ws2 = Worksheets("Sheet2")
Set Ws3 = Worksheets("Sheet3")
Ws1.Select
Set Rng = Cells(1, 1).CurrentRegion
With Rng
.Copy
.PasteSpecial Paste:=xlPasteValues
.Sort _
Key1:=Cells(1, 3), _
Order1:=xlDescending, _
Header:=xlNo, _
Order...続きを読む

Qエクセルで作成したカレンダーに「当番の名前」を自動的に入力する方法をお

エクセルで作成したカレンダーに「当番の名前」を自動的に入力する方法をおしえてください。


毎月エクセルで朝礼当番表を作っています。
土、日、祝がお休みです。
たとえば、1日に最初の人の名前を入力すると休みの日はぬかして、
順番に当番が入力されるという関数があれば教えてください。

1行目に「日にち」
2行目に「曜日」
3行目に「当番者名」

と簡単な表です。

リストからコピペしたら間違えてしまいました。

オートフィルで入力しようかと思ったのですが、休みの日を抜かすのが面倒で。


よろしくお願いします。

Aベストアンサー

>6行目(B6セル)に =IF(B6=0,MOD($B2-2+DAY(B3)-SUM($B5:B5),$B1)+1,0)
式を分解してみるとわかりやすいです。
更に
7行目に作業列 =$B2-2+DAY(B3)
    日にちごとに 日にち事に連続した番号になります。
8行目に作業列 =MOD($B2-2+DAY(B3),$B1)
    その番号を 人数で割ったあまりがでます。
9行目に作業列 =SUM($B5:B5)
    休みの数の合計がでます。

と入れて右へコピィしてみてください。
式のセルを指定する $B2 とか$マークが付く場合と付かない場合がありますよね。
絶対参照と呼びますが、意味は右へコピィしてもセルの位置を変動させないということです。
例えば
9行目の=SUM($B5:B5)の式を右へコピィした場合
=SUM($B5:B5)
=SUM($B5:C5)
=SUM($B5:D5)
・・・
と合計する範囲が広くなっていくように設定してあります。

別件ですが
カレンダーの日付をコピィの作業をしなくても良いように関数をいれておくことも出来ます。
   A     B   C   D・・・
1 人数    5   年  2010
2 最初の人  1   月   1
3 日付    10/1 10/2
4 曜日    金曜  土曜・・・
とD1セルに 年 の数値 D2セルに 月 を数値で入れます。
日付のB2セルには =DATE($D1,$D2,COLUMN(A1)) と入れて右へコピィしておきます
ここも 年と月を決める D1とD2のセルを指定するときは右へコピィしても変動しないように
$マークをつけておきます。
COLUMN(A1)はA1セルの列の番号です。右へコピィした場合に
COLUMN(B1)
COLUMN(C1) と変動する様に $マークは付けません。
*COLUMN(A1)は COLUMN(A2)でもACOLUMN(3)でもかまいません。
曜日のB3セルには =B2 と入れます。書式=>セル で表示形式のタブ ユーザ定義 で aaa
と入れると その日の表示が曜日になります。
B3セルも右へコピィします。
毎月、月の部分を変更するだけで その月のカレンダーになります。
表示形式については
http://www.excel.studio-kazu.jp/lib/e3g/e3g.html
などを参考にしてください。

>6行目(B6セル)に =IF(B6=0,MOD($B2-2+DAY(B3)-SUM($B5:B5),$B1)+1,0)
式を分解してみるとわかりやすいです。
更に
7行目に作業列 =$B2-2+DAY(B3)
    日にちごとに 日にち事に連続した番号になります。
8行目に作業列 =MOD($B2-2+DAY(B3),$B1)
    その番号を 人数で割ったあまりがでます。
9行目に作業列 =SUM($B5:B5)
    休みの数の合計がでます。

と入れて右へコピィしてみてください。
式のセルを指定する $B2 とか$マークが付く場合と付かない場合がありますよね。
絶対参照と呼び...続きを読む

Q【大至急お願いします!!】エクセルを使ってシフト表を作成したい

【大至急です!!】
エクセルを使ったローテーションの作成方法を教えてください!!
エクセル初心者です。

人事異動で以下のような窓口当番のローテーションを作成することになりました。

会社のパソコンのセキュリティ上フリーソフトは使用できず、また、私自身のパソコンスキルからエクセルを使用して作成するよりほかないと考えています。
(私自身はマクロは使えません。)

エクセルのバージョンは2010です。

どのような方法があるか詳しくお教え下さい。

1.10名程度で2つの窓口を担当する。

2.1つの窓口に1名の担当者がつきます。

3.担当者は午前と午後で交代する。(=2名×2名で1日つき4名が必要)

4.休暇や繁忙時期を考慮する必要があるため、適宜担当できない日を考慮する必要がある。(繁忙期や休暇というのは、人によって取得日が違うため個別対応が必要という意味です。)

5.担当者の経験が分かれるため、10名を2グループに分け、なおかつ顔合わせもランダムになるようにしたいです。



ざっくりしているかもしれませんが、以上です。宜しくお願いします。

【大至急です!!】
エクセルを使ったローテーションの作成方法を教えてください!!
エクセル初心者です。

人事異動で以下のような窓口当番のローテーションを作成することになりました。

会社のパソコンのセキュリティ上フリーソフトは使用できず、また、私自身のパソコンスキルからエクセルを使用して作成するよりほかないと考えています。
(私自身はマクロは使えません。)

エクセルのバージョンは2010です。

どのような方法があるか詳しくお教え下さい。

1.10名程度で2つの...続きを読む

Aベストアンサー

>窓口が午前・午後各2名ある場合は各列にコピペして増やせば良いのでしょうか
いや、全員を2つのグループに分けてそれぞれのグループから1人ずつという風に理解していたので、その表は一人しか選びません。だって、経験によって2つのグループに分けるのですから、多分ベテランと新人のグループに分けるんでしょう?ですから、ベテラン用の表と新人用の表を2つつくってそれぞれから1人ずつ選ぶという使い方を想定しています。
もし一つの表で2人選ぶということであれば(もちろんそれが要求仕様なのですが)、根本的に作り替えなければならないので、申し訳ないですがお手伝いできないです。
ただ、別の方がアイデアをお持ちかもしれませんので、その「担当者の経験が分かれるため、10名を2グループに分け」が具体的にどういう意味なのか捕捉されておくとよいでしょう。不躾ながら正直言うとベテラン用と新人用で分けてそれぞれから一人ずつ選べばいいんじゃないかなぁ、としか思えないのです。

>お教えいただいた形の場合、何か入力するたびに再計算されるのですが、そもそもそうゆうものなのでしょうか?
そうです。ですから、エクセルの設定を手動計算にする必要があります。
リボンに「計算」というタブがあります。そこに「計算方法の設定」という項目がありますから、そこで設定します。詳しくはこちらをどうぞ↓。
https://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=012854
再計算するにはF9を押します。

>午後当番→同じ方が午前当番となってしまう事例が発生しています
それはそうなると知っていました。午前と午後で交代するということだけだったので、日付が変われば午後と午前でつながってもいいという意味だと思っていました。でも午後-午前も一緒に禁止する方が実装するのは簡単です。Plan Optimized の部分は第一日目の午前を除いて、全部同じにすればいいです。つまり第一日目の午後をそのままま全シフトにコピーすれば午後-午前もなくなります。
ただ前の月の最後のシフトとの関係は人間が確認しなければならないです(これは前のバージョンでも同じ)。

>何度再計算しても各人の当番回数がかなりばらついてしまいます。
そうですね。それは手で調整することを想定しています。私の手元では5人の表を作ったので何回かやるといい感じのが出てくるのですが、それでも特定の期間にかたまってしまうというようシフト表になってしまいます。10人でやるとさらに理想的なシフト表ができにくいかもしれません。でもまるっきり白紙の状態から手で作るよりはかなり楽になるのと思うのですが。
また、本質的な解決方法じゃないですが、過去の3シフトに入っていた人からは選ばない、というような条件を付け加えると、少しはましになるようです。「過去の3シフト」の縛りを加えるには、Plan Optimized の項目で第2日目の午後シフトを =If(CountIf(B24:D24,"√")>0,"x",If(E4="x","x","")) として下と右にコピーしていきます。ただし、この縛りを入れると、とても規則的なシフト表になるとか、誰も入れない日がいくつも出てくるとか、別の問題も出てきます。

>パソコンに詳しい方からすれば無茶な質問であることは理解しております。
私はそうは思いませんが、ただエクセルのファイルのままで渡せないとかいうのがありますので、こういう掲示板でやり取りするとちょっと時間かかるのはたしかですね。

>窓口が午前・午後各2名ある場合は各列にコピペして増やせば良いのでしょうか
いや、全員を2つのグループに分けてそれぞれのグループから1人ずつという風に理解していたので、その表は一人しか選びません。だって、経験によって2つのグループに分けるのですから、多分ベテランと新人のグループに分けるんでしょう?ですから、ベテラン用の表と新人用の表を2つつくってそれぞれから1人ずつ選ぶという使い方を想定しています。
もし一つの表で2人選ぶということであれば(もちろんそれが要求仕様なのですが)、根本...続きを読む

Qエクセルで打ち込んだ数字を自動で別シートに表示したい

エクセルでセルに打ち込んだ数字を自動で別シートに表示できる方法があれば、教えてください。

例えば、シート1のC1に5を打ち込んだら、シート2のD2にシート1で打ち込んだ5が自動で表示される。

また1列すべてを自動で表示させる場合、一つのセルの時と違いがありましたら教えてください。よろしくお願いします。

Aベストアンサー

こんばんは。
入力したセルの値を合計とかでなくて、
純粋に別のシートに自動的に表示したいのであれば、
以下の方法があります。

1.1つのセルだけの場合
例)シート1のC1に5を打ち込んだら、
  シート2のD2にシート1で打ち込んだ5が自動で表示される

⇒シート2のD2のセルをアクティブにして「=」を入力
 した後、シート1のC1をクリックする。
 そうするとD2のセルに「=Sheet1!C1」と表示され、値が自動的に
 表示されるようになります。

2.1列全てコピーしたい場合。
  コピー&リンク貼り付けを使うと便利です。

例)例)シート1のC1~C5に何かを入力したら、
  シート2のD2~D7にシート1で打ち込んだものが自動で表示される

  シート1にあるコピー元のセルを範囲選択して、
  シート2のD2の上で「右クリック」⇒「形式を選択して貼り付け」
  をクリックします。

  そして出てきた小さな画面の左下にある「リンク貼り付け」という
  ボタンをクリックすると完成です。
  試してみてください。。

  念のためにリンク貼り付けを図解しているURLを載せておきます。
  参考にしてみてくださいね。。
  http://www.geocities.jp/office_inoue/excel/eq21.htm

こんばんは。
入力したセルの値を合計とかでなくて、
純粋に別のシートに自動的に表示したいのであれば、
以下の方法があります。

1.1つのセルだけの場合
例)シート1のC1に5を打ち込んだら、
  シート2のD2にシート1で打ち込んだ5が自動で表示される

⇒シート2のD2のセルをアクティブにして「=」を入力
 した後、シート1のC1をクリックする。
 そうするとD2のセルに「=Sheet1!C1」と表示され、値が自動的に
 表示されるようになります。

2.1列全てコピーしたい場合。
  コ...続きを読む

Qexcel 当番表を作る

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

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

Aベストアンサー

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

どんな方法がやりやすいか、いろいろ試してみてください。

原則として
「お昼当番」がA→B→C→D→E→F→G
「朝礼当番」がC→B→A
という順番で繰り返すという感じでしょうか。ですが、3日や13日のように重複する日が出てしまうので、これを避けたいということですよね。
これを「自動的に行う」ということであれば、3日のような例外処理もあるので、VBAでプログラムを作成するという必要があるでしょう。こちらについては、諸条件を明確にしていく必要がありますので省略します。

ですので、もう少し手順を簡単にするという方向性でしょうか。
現在は、コピペで名前を入力...続きを読む


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

人気Q&Aランキング