- ベストアンサー
エクセルのランダム抽出について・・・
エクセルのランダム抽出に付いて教えてください。 A列に1000人の名前が並んでいます。 これをB列に5~8名程度をランダムに表示させるやり方が 知りたいです。 できたらボタンをつけてそれを押すたびにB列の表示が ランダムに変わるやり方がわかると大変助かります。 もしごぞんじのかたがおりましたらぜひともご教授 くださいませm(__)m
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
ん~、 ・どの程度のことをなさりたいのか ・どの程度のスキルをお持ちなのか 判らなかったので静観していたのですが、 なかなか回答がつかないようですし、 コーディング技術に関するご質問でもないようなので、 とりあえずご参考まで。 ----------------------------------------- ●まずは素朴に関数で。 B1セルを =INDEX($A$1:$A$1000,INT(RAND()*1000)+1) として必要な人数分下方にフィルすれば、一応結果はでます。 F9キーを押せば再抽出されます。 ※1 他のセルに何か入力した場合もその都度再抽出されるので、 抽出した名前を用いてなんらかの処理する場合には、 コピー>値貼り付けで確定する必要があります。 ※2 それぞれ個別に選んでいるだけなので、 同じ名前が重複して選ばれる可能性があります。 まぁ、対象データは名前ですし、5人程度であれば、 目視で確認して再抽出すれば良いかもしれませんが…。 ※3 ボタンをクリックして再抽出、というのは、 VBAを使わなければ基本的にできません。 ----------------------------------------- ●VBAで ・値として抽出 ・重複がないように抽出 ・ボタンをクリックして再抽出 するためには、やはり、VBAでプログラミングしたマクロを、 コマンドボタン等に登録することになります。 以下、あくまでサンプルですが…。 動作の概要 A1:A1000の範囲から 5つをランダムに抽出して、 B列1行目から表示する。 '-----------------↓ ココカラ ↓----------------- Sub Sample() Dim 抽出結果() As Integer Set 抽出範囲 = Range("A1:A1000") 抽出数 = 5 結果列 = "B" ReDim 抽出結果(抽出数) For i = 1 To 抽出数 Do 抽出結果(i) = Int(Rnd * 抽出範囲.Rows.Count + 1) If i = 1 Then Exit Do f = True For j = 1 To i - 1 If 抽出結果(i) = 抽出結果(j) Then f = False Next j Loop Until f Cells(i, 結果列) = 抽出範囲(抽出結果(i)) Next i End Sub '-----------------↑ ココマデ ↑----------------- 選んだものが、既に選んでいるものと重複するか否かを、 その都度総当りでチェックして、重複する場合は選び直しています。 抜き出す数が多くなると賢い方法とは言えませんが…。 以上ご参考まで。
その他の回答 (2)
- assault852
- ベストアンサー率48% (1364/2797)
>やっぱり私のやりたいやり方はVBAのスキルとかが必要なんでしょうか もちろんです。 そういう意味では#2の回答が適切でしょう。 お勉強するつもりがなければ、あまり複雑なことは望まない方がよろしいと思います。
- assault852
- ベストアンサー率48% (1364/2797)
VBAの書き方をお尋ねなのでしょうか。
お礼
教えて!gooからのメールを見逃していました(汗) ご回答ありがとうございます。 >VBAの書き方をお尋ねなのでしょうか。 やっぱり私のやりたいやり方はVBAのスキルとかが 必要なんでしょうか? ほとんどVBAはわからないのですが・・・・ なにか簡単にできるソフトとかがあると便利なんですが・・・・ m(__)m
お礼
deus_ex_machinaさんありがとうございます。 1日にご回答いただいていたのに、gooからの「新しい回答が投稿されました」を 見落としていました(汗) 本日のassault852さんの投稿のお知らせで気が付きました。 ●まずは素朴に関数で。 こちらでやりたいことができました。 ボタンを使ってとなるとVBAのスキルが必要みたいで、私には だるまさんです(手も足も出ない) というとことで関数のやり方を活用させていただきます。 VBAのほうも勉強して試してみたいと思います。 アドバイスいただいた皆さんに感謝いたします m(__)m