- ベストアンサー
エクセル初心者質問
sheet1に、1~1900のデータがあります。 そのデータをランダムに参照したいので、 、 sheet2のa2に起点番号、b2に終点番号を入力したときに、 c2:c101に、起点から終点の範囲(前提としてb2-a2>=100)で 重複しない任意の数字100個を出力する方法を教えてください。 よろしく願います。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
御質問文中の説明が今一つ不明瞭ですので、はっきりとは判らない点が幾つかありますが、推測します処、 「Sheet1に1から1900までの連番が入力されている列(何列かは判りませんが)があり、 その連番が振られている列とは別の列に数値のデータが入力されていて、 Sheet1の連番の中で、Sheet2のA2セルに入力した番号と同じ(連番の)番号がある行から、 Sheet1の連番の中で、Sheet2のB2セルに入力した番号と同じ(連番の)番号がある行にかけての、 別の列(連番ではなく、データが入力されている方の列)のデータの中から、 100個のデータをランダムに取り出したい。 但し、データの中には同じ値のものが重複して入力されている場合もあり、取り出した値の中には重複しているものが無い様にしたい。」 と考えれば宜しいのでしょうか? もしそれで宜しいのでしたら、以下の様にされると宜しいかと思います。 今仮に、Sheet1のA2~A1901のセル範囲に1~1900の連番が入力されていて、Sheet1のB2~B1901のセル範囲に重複した部分もある何らかのデータが入力されているものとします。 又、Sheet3のA列を作業列として使用するものとします。 まず、Sheet3のA2セルに次の数式を入力して下さい。 =IF(OR(INDEX(Sheet1!$B:$B,ROW())="",COUNT(Sheet2!$A$2,Sheet2!$B$2)<2,ISERROR(1/(MATCH(Sheet2!$A$2,Sheet1!$A:$A,0)<=MATCH(Sheet2!$B$2,Sheet1!$A:$A,0)))),"",IF(OR(ROW()<MATCH(Sheet2!$A$2,Sheet1!$A:$A,0),ROW()>MATCH(Sheet2!$B$2,Sheet1!$A:$A,0),COUNTIF(INDEX(Sheet1!$B:$B,MATCH(Sheet2!$A$2,Sheet1!$A:$A,0)):INDEX(Sheet1!$B:$B,ROW()),INDEX(Sheet1!$B:$B,ROW()))>1),"",RAND())) 次に、Sheet3のA2セルをコピーして、Sheet3のA3~A1901の範囲に貼り付けて下さい。 次に、Sheet2のC2セルに次の数式を入力して下さい。 =IF(ROWS($2:2)>COUNT(Sheet3!$A:$A),"",INDEX(Sheet1!$B:$B,MATCH(SMALL(Sheet3!$A:$A,ROWS($2:2)),Sheet3!$A:$A,0))) 次に、Sheet2のC2セルをコピーして、Sheet2のC3~C101の範囲に貼り付けて下さい。 以上です。 尚、この方法では、Excelで何らかの計算が行われる度に、データをSheet1の指定範囲の中のどのセルから取り出して、どの様な順番で並べるのかが、ランダムに変化しますので、もし、取り出したデータを残しておく場合には、Sheet2のC2~C101のセル範囲をコピーして、適当なセル範囲に「値のみを」貼り付けておかれる事を御勧め致します。
その他の回答 (1)
- yosifuji20
- ベストアンサー率43% (2675/6115)
C2 =B2-A2 D2からD101 =INT(RAND()*C$2+A$2+1) これでD2からD102にランダムな整数で、A2からB2の範囲の整数が出てきます。 ただし重複がないという保証はありません。重複を避けるには工夫が必要ですが、それよりはD2からD101の範囲をD2からD110など少し余計に作って、重複した値はD102以下の値を採用するというようにしたほうが早いと思います。