FC2ブログ

少し、面白い問題 重複しないランダムな値

問題文

 画像のような配置図

 201905311010.png

 薄い緑色で塗りつぶされたセルに、名前を表示させる
 その名前は、以下のように五十音順に入力されている
 ※ K列に、通し番号 L列に、「名前」 セル範囲は、K14:L53

  201905311011.png

条件 1

 A1 が、空欄の場合は、
  B3 から順番に、H12まで、あいうえお順


  201905311012.png

条件 2

 A1 に、何か入力されたら、
  ランダムな名前を 入力する


  ここで必要なことは、ランダムで、なおかつ、重複しないもの
  名前= L13:L53 を、ランダムに、重複しないように選択する
  そのために、隣のセルにRAND 関数を入力する
  RAND 関数
   0 以上で 1 より 小さい実数の乱数を 返します

  201905311013.png

  さらに、N 列に、今入力した関数で表示される乱数に順位を付ける
  N14 へ、入力する関数は、順位を求める RANK 関数
  =RANK(M14,$M$14:$M$53)

  201905311014.png

  この関数で、求められた数値は、
  「名前」を 「 1 」 から 「 40 」 の 数値で 区別した

あとは、
 どうやって「名前」を求めるか?

最初の「条件 1」の場合は
 セル B3 に入力する数式は、「 =L14 」
なので、
「A1 セルが、空欄の場合」 これは、 I F 関数を使用する
 =IF($A$1="",L14,

  これから、「名前」を 表示するには、L14~L53 を 求めればよい
  それに、ランダムの数値を参照する
  N列で、求めたのは、 1~40 なので、
  N 列の数値 足す 「13」のL列のセル番地
  セル参照を文字列で表示できる関数
  INDIRECT 関数を 使用する
  =INDIRECT("L"&N14+13) 
  この数式を 入力した場合、表示されるのは
  N14 セルに、表示されるランダムな(1-40)の数値足す「13」
  L列の L14~L53のセルのいずれかの「名前」

結 局
  
  B3 セルに入力する関数は
  =IF($A$1="",L14,INDIRECT("L"&N14+13))
  下へ オートフィル

  D3 セルに入力する関数は
  =IF($A$1="",L24,INDIRECT("L"&N24+13))

  F3 セルに入力する関数は
  =IF($A$1="",L34,INDIRECT("L"&N34+13))

  H3 セルに入力する関数は
  =IF($A$1="",L44,INDIRECT("L"&N44+13))

.
スポンサーサイト



 

コメント

コメントの投稿

  • URL
  • コメント内容
  • password
  • 秘密
  • 管理者にだけ表示を許可する

トラックバック

トラックバックURL: http://cheflapin.blog.fc2.com/tb.php/573-da734133