[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『データをシャッフルして貼り付ける際にこんなことは可能でしょうか』(lion)
初めまして。ご教示いただきたいことがありまして投稿させていただきました。
Sheet2 の B2からB21まで20名分の人名が入っているとします。このデータを元にランダムにグループ分けをしたいと考えています。
グループの結果は Sheet1 の
B2-B4 5名分
C2-C4 5名分
D2-D4 5名分
E2-E4 5名分
で表示させたいと思います。
考え方としましては,Sheet2のデータに乱数を発生させて,それをベースに昇順(降順)に並べなおして,上から5名ずつコピペしていくと思います。
私が悩んでおりますのは,この際,例えばですが,Sheet2 のB5のデータとB13のデータがどんなにシャッフルをしても同じグループにならないようにするということです。
端的に考えれば,その二人のデータを最初と最後に固定してしまえば早いと思うのですが,実は,そのシャッフルからグルーピングの最終結果の表示まで,生徒の前で示しながら行うため,特定の二人だけがずっと同じ場所に表示されると怪しまれてしまうと思われます。
生徒に「何回シャッフルする?」と尋ね,生徒が「3回」といったら,生徒の前で3回シャッフルボタンを押し,毎回メンバーが替わることを確かめながら,最終決定をしたいと考えています。
VBAでこんなことは可能なのでしょうか?ぜひご教示いただけませんでしょうか。
< 使用 Excel:Excel2016mac、使用 OS:MacOSX >
どうせSheet1しか見せないんでしょ?
結果が出た後Sheet2見られても問題ないでしょう?
でも4、5回やったら、なにかおかしいって、勘のいい子は気付くかもですね。
気付かれたら信用なくなるだろうなぁ・・・・・・・・・・・・・・・・・・・・・
(まっつわん) 2017/10/05(木) 14:02
と思うのはぼくだけかな。。。。(ま、そこまで見せても、マクロでごまかせるのですけれども^^;)
(まっつわん) 2017/10/05(木) 14:11
ちょっと判定を横着していて、5つ差未満を駄目、としましたが、実際には5番目と6番目に隣り合っても大丈夫ですよね。でもこの場合でも再度並べ替えてしまうところが手抜きです。
Sub test() Dim i As Long Dim iR1 As Long Dim iR2 As Long
Application.ScreenUpdating = False
With Worksheets("Sheet2") While Abs(iR1 - iR2) < 5 .Sort.SortFields.Clear .Sort.SortFields.Add Key:=.Range("C2:C21") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal .Sort.SetRange .Range("B2:C21") With .Sort .Header = xlGuess .Apply End With
For i = 2 To 21 If .Cells(i, "B") = "B5" Then iR1 = i ElseIf .Cells(i, "B") = "B13" Then iR2 = i End If Next i Wend End With
Application.ScreenUpdating = True End Sub
そして、みなさん懸念しているように、動きを見せるだけなら問題ないですが、どうやってんの?、とか問われて、マクロを見せる事になった際、贔屓した名前がバレる可能性がある点が気になりますね。
(???) 2017/10/05(木) 14:53
(15:14 無駄や不足があったので、若干修正)
お返事が遅くなり申し訳ございません。ご心配,本当にありがとうございます。
(???)様(でよろしいのでしょうか?)
具体的なコードをありがとうございました。
ご教示いただきましたようにSheet2 Cの列に乱数を発生させて,実行をしたのですが,何回行っても,動作をせず,「応答しません」となって,結局excelをcloseしなければいけません。
なにか問題なのでしょうか?
私はExcel for Macを使用しております。
ご指導お願いいたします。
(lion) 2017/10/06(金) 07:31
おおまかには、並べ替える処理と、判定用の処理の2つです。並べ替えが動作しているかどうかで、どうすれば良いか決めましょう。
(???) 2017/10/06(金) 09:02
早速のお返事をありがとうございました。
最後のご説明で,B5, B13のまま実行していることに気がつきました。うっかりミスで申し訳ございません。
無事思った通りの動作が完成しました。
ありがとうございました。
(lion) 2017/10/06(金) 11:17
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.