• ベストアンサー

【Excel】ランダムで良いのが見つかりません

いつもお世話になっております。 エクセルで掃除の当番表を作成したく知識を借りたいです。 9人を毎月ランダムで当番決めしたいです。 図の”●”が当番担当者を示しています。 この”●”をランダムで入れたいのです。 参考にできそうなサイトも見つけられませんでした。 どなたか参考になりそうなサイトや方法わかる方いましたら 宜しくお願い致します。

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

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.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行目の日付を手動で変えることによって対応することができます。

moguraaaaa
質問者

お礼

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

その他の回答 (2)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 当番日そのものを完全にランダムにしますと、当番となる日数が人によって異なって来てしまいますので、掃除当番を行う順番をランダムに決まる様にされては如何でしょうか?(この方法でも月の変わり目で、当番を行う日数に差が生じてしまう恐れがありますが)  今仮に、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キーを押せば再計算が行われます。

moguraaaaa
質問者

お礼

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

  • 9056-9046
  • ベストアンサー率31% (236/759)
回答No.1

9人で31日を掃除交番するとなると 1人3回その他4人が4回になるようですね。 こういった交番は斜め交番で 右上がりとかその逆でよく設定しますよね。 そんな単純だと駄目でしょうかね? その他参考までに 一つ●箇所をコピーして●を入れたい セル一つ一つをCtrl+クリックして 最後に貼付けすれば一度で全部埋められますよ。 そういったことではない!?かな?

moguraaaaa
質問者

お礼

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

関連するQ&A

  • エクセルでランダムな並べ替え

    パソコン初心者です。エクセル97で当番表を作成しました。列に仕事名、行に名前(漢字)を入力しました。毎月、役割当番を変更したいのですが、ランダムに並べ替えをする方法がわかりません。どうかよろしくお願いします。

  • [緊急!]SQLで当番表作成

    初めまして。 最近、SQLを学び始めました。 会社で掃除当番表を作成することになったのですが、どのようにしたらいいのかがわかりません。 条件としては、 1.人数は全部で31人。 2.1度にランダムに5人ずつ当番になる。 3.1度当番になると、全員の当番が一巡するまで回ってこない。 4.SQLServer2012を使用し、プログラミング後はAccessのフォームに出力してフォームで確認可能。 5.ランダムに選ばれた当番表を履歴テーブルに残す。 の5点になります。 本やネットで調べてみたのですがうまくいきません。 ご教授をお願い致します。

  • ランダム関数

    ご教授お願いいたします。    現在エクセル2007で正の表があり、それに  ランダム関数を使った表を作成しました。  そして、そのランダム表と正の表が一致した  回数を調査するエクセルを同一シートに  作成しました。しかし、この方法だと  キーボードのF9を毎回押していないと  更新されないので、常に監視していないと  難しいです。  そこで、F9を押すマクロを一回作成したのですが  そこから先で、そのマクロを一回実行すると  永久的に、処理し続ける方法はありませんか?  また、追加ですがその処理中に一致回数が任意の  回数以上になったら中断でくる機能もご教授  いただけたら幸いです。  なお、この方法以外の作成方法がございましたら  さらにご回答をお願いいたします。  以上

  • 表(リスト)からランダムに抽出するには?

    Excelで次のような表を作りました。(例として書きます) 1. みかん 2. バナナ 3. もも 4. なし 5. 栗   ・・・(以下同様) と続いていきます。 今回、その表から、ランダムにデータを抽出し、別のセルに書き出したいのですがどうやっていいのかわかりません。(理想図を下に書きます。) 2. バナナ 5. 栗 1. みかん  ・・・・・(以下同様) このようにして、今ある表から、ランダムに並び替えた、 『新たな表』 を作りたいのです。 どのように関数(RAND関数?)を設定したらいいのかよくわかりません。 教えてください。お願いします。 ちなみにOffice2000です。

  • Excel カレンダー 当番表

    Excelでカレンダー形式で当番表を作成したいです。 平日だけ割り当てて、土日祝はなし。当番はローテーションで、20人ほどいます。 毎月作成しなければならず、できれば簡潔に関数だけで作成したいです。 どなたか、教えてください。。 宜しくお願いします。

  • EXCEL2003での計算方法など

    これから大学でエクセルを使って グラフ作成や計算をしなければならないのですが、 あまりエクセルに関して知識がないので エクセルでのグラフの作成方法や計算方法が わかりやすく載ってるサイトもしくは参考書があれば 教えてください。

  • エクセルの大量のデータの行をランダムに並び替える方法

    エクセルで表を作成したのですが、データを間引きしたいと思っています。 きちんと作成した表をある程度、規則性もないデータにしたいため、行をランダムに並び替えて、ごっそり半分くらい削除してしまえば、いいのではないかと思いつきました。ただ、ランダムにデータを並べる方法というのはあるのでしょうか? 結果的にランダムにデータが間引ければ、いいので、もしよい方法がありましたら教えてください。手で作成したデータは1000*30件程度です。がんばれば手で間引けないこともないのですが、もっと効率的な方法がありましたら、非常に負荷軽減になるのでお教えください。

  • Excelにて当番表の作成をしたい

    以下の条件の当番表の作成をしたいと思っております。 他質問の回答等拝見いたしましたが、条件が合わず質問させて頂きます。 条件 ①A~Hの計8名でランダムに担当となる ②毎日1名が担当する(3ヶ月分をまとめて作成しています) ③連続しないよう、3日以上間を空ける ④個人に確認した担当不可日を設定する ⑤平日、土、日祝でそれぞれの担当最小数・最大数を設定したい(回数は一律ではなく個人個人で変わる) ⑥順番に割り当てる必要はなく、ランダムでも問題ありません なお、シフト表のように遅番・早番等はないのでそのような設定は不要です。 祝日一覧シートは作成済みです。 よろしくお願い申し上げます。

  • 急ぎでお願いします・・・

    当番表を作成しているのですが、簡単に出来る関数があったらお教え願います。 下記のように、1日2人で順番に回るような図をEXCELで作成したいと思っております↓ 6/1  6/2  6/3 … A   C   E B   D   F  よろしくお願いします!!!!

  • Excel図形のリンク

    Excelにて表を作成しています その中で図(ユーザ作成の図)を1個作成し、他の場所に 同じ図を使用したいのです。 通常、コピー&ペーストで同一図を貼り付けますが 最初作成した図をリンク元として貼り付ける事はできますか? (最初の図を修正すると、リンクしている図も同様の図になる) ちなみにWordでは出来るのですか? ご教授願います。