- ベストアンサー
エクセル 名簿でランダムに
お世話になります。 エクセル上の名簿(59人)でランダムに9グループ(7人を5グループ、6人を4グループ)に分けたいと思います。 マンネリを避けるためにランダムで組みたいと思いますが、エクセルの機能で良い具合にグループ分けをしてくれる機能は、ないでしょうか。 どなたかお詳しい方、よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
1.範囲 F2:F60 に59人の名前を入力 2.セル E2 に式 =RAND() を入力して、此れを下方にズズーッとドラッグ&ペースト 3.セル C2 に式 =VLOOKUP(SMALL(E$2:E$60,ROW(A1)),E$2:F$60,2,FALSE) を入力して、 此れを下方に(セル C60 まで)ズズーッとドラッグ&ペースト 4.グループ分けは次のようにすればよろしいかと 7人グループ1 → C2:C8 7人グループ2 → C9:C15 7人グループ… → ……… 7人グループ5 → C30:C36 6人グループ1 → C37:C42 6人グループ2 → C43:C48 6人グループ3 → C49:C54 6人グループ4 → C55:C60
その他の回答 (5)
- merlionXX
- ベストアンサー率48% (1930/4007)
ANo3 merlionXXです。 > バージョンは、2010です。 > VBAの画面が出てこないので、ネットでVBA画面の出し方を調べて出しました。 > それに貼り付けることはできたんですが、それ以降をどのように行えば良いのか分からなくなってしまいました。 Windows7/Excel2010を持っている方のところで試してきました。 2007までと同様に ワークシート画面から、Altキー+F11キーでVBE画面にいけました。 VBE画面から、Altキー+F11キーで、またワークシートに戻れました。 ワークシート画面でAltキー+F8キーで、マクロ実行のダイアログも出ました。 標準モジュールにちゃんとコピペされているかどうかもう一度確認してから、再度お試しください。
- imogasi
- ベストアンサー率27% (4737/17069)
既回答もそれと思うが、1-59の乱数を59人の作業列にふり、その乱数順にソートする。もちろん同番号は現れるが、ソートすることにより、同じ乱数値でも上からの順位(場所というか)は決めてくれる。 これで上から7人ずつ5組と、残り6人を4組作れば良い。 エクセルの関数RAND、RANDBETWEENを使う。 http://d.hatena.ne.jp/sutara_lumpur/20080826/1219742033 http://aoki2.si.gunma-u.ac.jp/Hanasi/excel/のような記事もあります。 しかし質問程度の場合は気にしなくても良いかと。 乱数が出た直後に、乱数の式を消して、自身のセルに値化するほうが良いと思います。(形式を選択して貼り付けー値) エクセル関数のSeed値 VBAの場合はシード値を指定できます。 http://officetanaka.net/excel/vba/function/Rnd.htm ーー 一発で出すなら
お礼
ご回答ありがとうございます。 難しいっすね。やってみます。
- merlionXX
- ベストアンサー率48% (1930/4007)
エクセルのバージョンは何ですか? すくなくとも2007までは試したことがあり、この方法で大丈夫だと思うのですが・・・。 > VBAにコピペするところまでは、できたんですが、その後、Alt+F11、Alt+F8ができません。 > そもそも、Alt+F11でVBAがでてきませんでした。 Alt+F11でVBE画面がでなかったら、どうやってどこに貼り付けましたか?
お礼
たびたびのご回答ありがとうございます。 バージョンは、2010です。 VBAの画面が出てこないので、ネットでVBA画面の出し方を調べて出しました。 それに貼り付けることはできたんですが、それ以降をどのように行えば良いのか分からなくなってしまいました。 何度もすみません。
- merlionXX
- ベストアンサー率48% (1930/4007)
Rand関数での方法はすでに出ていますが、関数方式だと再計算のつどグループが再設定されてしまいます。 その点、マクロならユーザーが指示しない限りそのままの状態を維持します。 以下の前提でマクロを作成しました。 ・対象となる59名のデータはSheet1のA1セルからA59セルにある。 ・グループを書き込む先はSheet2のA列からI列に7名5グループ、6名4グループ、Sheet 手順は以下のとおりです。とても簡単ですよ。 1.データのあるエクセルの画面上で、AltキーとF11キー同時に押し(以下Alt+F11キーと記述)て Visual Basic Editor を呼び出します。 2.Visual Basic Editor のメニューから「挿入」、「標準モジュール」で出てきたコードウィンド(右側の白い広い部分)に以下のコード(Sub~End Sub)をコピペします。 '********これより下********** Sub test01() Dim ws(1 To 2) As Worksheet Set ws(1) = Sheets("Sheet1") Set ws(2) = Sheets("Sheet2") Randomize With ws(2) Application.ScreenUpdating = False ws(2).Cells.ClearContents ws(1).Range("A1:A59").Copy .Range("A1:A59") For i = 1 To 59 .Cells(i, "B") = Rnd Next i .Range("A1:B59").Sort Key1:=.Range("B1"), Order1:=xlAscending, Header:=xlNo, Orientation:=xlTopToBottom .Range("B1:B59").ClearContents For i = 1 To 10 x = IIf(i > 5, 1, 0) .Range(.Cells(8 - x, i), .Cells(8 - x, i).End(xlDown)).Cut Destination:=.Cells(1, i + 1) Next i Application.ScreenUpdating = True End With End Sub '********これより上********** 3.Alt+F11キーでワークシートへもどります。 4.Alt+F8キーで出てきたマクロ名(test01)を選択して実行します。 上記4.を何度でも実行できます。 その都度Sheet2のグループ構成員はランダムに変わります。 お試しください。
お礼
ご回答ありがとうございます。 VBAにコピペするところまでは、できたんですが、その後、Alt+F11、Alt+F8ができません。 そもそも、Alt+F11でVBAがでてきませんでした。 どうしたら、よいでしょう。
- srx-atx
- ベストアンサー率41% (12/29)
図のようにA列にランダムで大きい数字を表示し、 B列にA列の数字の順位をつけ、それを59行目までコピーして、 順位に対応する出席番号にすれば大丈夫だと思います。 しかしこの方法だとグループ分けができないので、 上から何人がAグループ、みたいな分け方をしなければなりません。 あと、ランダムの数字の表示は何か作業をするごとに変化してしまうので、 気をつけてください。 ※ ランダムの表示なので小さい確率で同じ数字が表示される場合がありますが、 どこかに一文字入力するなど何か作業をすれば数字は変化します。 A1内容 =RAND()*100000000 B1内容 =RANK(A1,$A$1:$A$59)
お礼
ご回答ありがとうございます。 すごいっすね。できました。ありがとうございます。 どうしたら、そんなにエクセルをマスターできるんですか!?