• 締切済み

Excelで勤務表の勤務記号をランダム作成するには

   1 2 3 4 5・・・・ 山田 A A 佐藤 C A 田中 D B 鈴木 B B =IF(D$6="","",IF(COUNTIF($AJ8:$AN8,D$6)>0,"休",SWITCH(RANDBETWEEN(1,5),1,"A",2,"B",3,"C",4,"D",5,"))) この式だと1日に同じ記号がダブったりします。(2の下のように) 上記のような勤務表でランダムに1日A~Dが各1回しか出ないようにしたいのですが、その様にするにはどうすればいいでしょうか? (1の下のように) 説明が分かりにくく申し訳ございません。

みんなの回答

  • keimori01
  • ベストアンサー率74% (69/93)
回答No.3

他の回答者の方の回答を見ていたら、思いついたのでポストしておきますね。8行目から11行目を作業用に使っています。 まず、B8:B11に「=RAND()」と入力し、必要なだけ右にもコピーしておきます。 セルB2に以下の関数を入力します。あとはB3からB5までオートフィル、B2:B5を右へオートフィルすればOKです。 =IFS(RANK.EQ(B8,B$8:B$11)=1,"A", RANK.EQ(B8,B$8:B$11)=2,"B",RANK.EQ(B8,B$8:B$11)=3,"C",TRUE,"D") 考え方としては、乱数を4つ発生させて、それぞれのメンバーに割り当てます(作業用)。それをRANK.EQ関数で順位を求め、IFS関数で1位をA、2位をB、3位をC、残りをDにしました。 なお、セルを編集モードにしてから元に戻すと、乱数が再度計算されるので表示が変わります。

  • SI299792
  • ベストアンサー率47% (772/1616)
回答No.2

AJ8:AN8,D6にどのような情報が入っているのか判らない。 この数式は変(エラーになり入力できない) どこに入っているか判らないので 画像のような表で、A~Dが1回だけランダムで出る方法です。 11~14行をワークエリアに使います。目障りなら非表示にして下さい。 C3: =CHAR(RANK(C13,C$13:C$16)+64) 右下へコピペ。 C13 =RAND() 右下へコピペ。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

しばらくの間、回答が出るか、様子を見ていたが、出てない。 この問題は難しいよ。質問者は簡単そうに質問を出しているように見えるが、 そもそも、数学的には、ランダムなものを出して(背後には数学的なプログラム処理が行われているのだが)も、同じもの(文字)が(確率はそれなりに少ないが)4連することも(例 AAAA)あることを、質問者は、わかってないのでは。  それと組み合わせの問題に絡んでくると思うが、4文字ぐらいなら、プログラムで求められる(解説のVBAコードがWEB記事で見つかる)が、数が増えると、すぐ膨大な数になって、手に「おえりゃーせん」ことになる。 ーー 質問例は、簡単にすることが多いし、それでよい場合が多いが、本件では、 (1)担当する見込みの人数は何人いて、 (2)仕事のタイプは何種類か、 (3)一日に重複はあり得ない、 (4)実際は4人の中で休む予定が居たり、この人はこの仕事はしない、などないものとするでOKとか、 などな明言しないと、回答も出しずらいと思うが。 === 私は質問者が、組み合わせを(人知絞って・事情加味して、作り)表にして、それの一組を引っぱってくる、仕組みにする、のがよいのではと思う。 ぐらいがよいのではと思う