プロが教える店舗&オフィスのセキュリティ対策術

次のようなルールでランダム抽出するシステムを作りたいのです。
1 AからC(14から16)各列に3つの数字があります。
2 18行目に各列に配置された3つの数字のランダムを表示させます。
  関数は次のとおりです。例としてA行
  =INDEX(A14:A16, RANDBETWEEN(1,3))
3 ただし、B、C行には0が含まれており、0は表示させません。
4 次にランダムで抽出されたA18, B18, C18の中からさらにランダムで1数字を選び出したい。
  そこで次のような関数を導入しました。
  =INDEX(A18:C18,RANDBETWEEN(1,3))
  
  ただし、この関数ですと図のようにCの0が選択される可能性があります。
 
目的は
 ランダムに抽出されたAからC列の数字のうち、0を除くものだけで再度ランダム抽出を行いたい
ということになります。

 何か良い案はありませんでしょうか?ご指南お願い申し上げます。

「エクセルで、0を含むセルを除外してランダ」の質問画像

A 回答 (4件)

こんな感じでどうでしょう。


①A18:C18の中から、ゼロより大きい個数を数えます。
②1から上記①までの範囲で乱数を発生させます。
③A18:C18から②乱数番目の数字を表示します。
ちなみに、すべてゼロの場合は表示するものが無いのエラーになります。

=LARGE(A18:C18,RANDBETWEEN(1,COUNTIF(A18:C18,">0")))
    • good
    • 1
この回答へのお礼

回答者1の方のやり方でやろうと考えておりましたが、こちらの方がベターかと考え、BAに選ばせていただきました。

みなさまおさわがせしました。知識豊富な方が多く非常にありがたいです。
お世話になりました!

お礼日時:2017/05/21 14:14

こんにちは。



=INDEX(SMALL(A18:C18,COLUMN(OFFSET(A1,,COUNTIF(A18:C18,0),,COUNTIF(A18:C18,">0")))),RANDBETWEEN(1,COUNTIF(A18:C18,">0")))

要するに、0を排除した配列を作ればよいということですね。
一つの数式に入れてしまうと、このようになろうかと思います。
それぞれの数値を出したほうが分かりやすいかもしれません。
    • good
    • 0
この回答へのお礼

ご指摘の通り、1つの数式で解決するのは難しいのがわかりました。
なので、別途乱数を使って処理してみます。
ありがとうございました。

お礼日時:2017/05/21 14:08

確認させてください。


0 を除けば、各列上から昇順に入力されているようだけど、実際は桁数も一定しない乱数ですか?
0 は必ずしも上側または下側でなく、中間の15行目だけに存在することもありますか?
    • good
    • 0

こんばんは!



RANDBETWEEN関数で対応するのは難しいと思います。
作業用の行を使っても良いですか?

仮に19行目を作業用として使用します。
A19セルに
=IF(A18=0,"",RAND())
としてC19セルまでフィル&コピー!

結果を表示したいセルに
=INDEX(A18:C18,MATCH(MAX(A19:C19),A19:C19,0))

としてみてはどうでしょうか?

※ 作業用の行が目障りであれば遠く離れた行にするか
非表示にしてみてください。

※ もっと簡単にできる方法があればごめんなさい。m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございます!ここは制御をするべきページですので、この方法試させていただきます。

お礼日時:2017/05/21 13:59

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