ランダムな席順に名前を入れる(前半)
マクロ講座 80回
ランダムな席順に名前を入れる Excel2013 マクロ講座 80回
ランダムな名前で席替え
ランダムな席替えの名前版になります。前回(2013_macro_79.htm)は、席に生徒番号をランダムに割り当てるというものでした。
番号を割り当てるのでは、そっけないという場合や、番号を忘れた生徒はどうするのか、などという問題が起こるかもしれません。
そこで、今回は座席に名前を表示するというタイプの席変え版です。
(サンプルファイルは、こちらから マクロ80回サンプルデータ)
名前で席替え
名前で席替えマクロのポイントは、乱数から得られた順番を昇順に並べ替えたことと、
1次元配列のデータ型をStringにして、生徒の名前を格納した点です。
使うシートは、名前を入力する席順用のシートと、名簿が記載された作業用のシートの2枚です。
作業用のシートには、A列に生徒番号(出席番号)B列に生徒名、C列はランダム値を入力するため、D列はランダム値から順位を得るために空欄となっています。
作業用のシートには、A列に生徒番号(出席番号)B列に生徒名、C列はランダム値を入力するため、D列はランダム値から順位を得るために空欄となっています。
席替え用に乱数を生成する
C列にはRAND関数を使って乱数を入力します。乱数を生成して、隣の列に順番を入力するコードは以下のようになります。
(はじめにすべてのモジュールで使えるようにパブリック変数を宣言しています。)
(はじめにすべてのモジュールで使えるようにパブリック変数を宣言しています。)
Public sheetobj1 As Worksheet 'ワークシートを代入するオブジェクト変数 Public sheetobj3 As Worksheet '〃 Sub 乱数発生して順番() 'ランダムな値を発生させる Dim ra As Integer '行数をカウントする変数 Set sheetobj3 = ThisWorkbook.Worksheets("sekijyun3") With sheetobj3 For ra = 2 To 41 '2行目から最終行まで .Cells(ra, 3).Value = Rnd '3列目に乱数を発生させる Next For ra = 2 To 41 '4列目に大きい順からの番号をつける .Cells(ra, 4).Value = WorksheetFunction.Rank(.Cells(ra, 3).Value, .Range("C2:C41"), 0) Next ra End With End Sub乱数を 発生させた後に隣のD列に乱数の大きさによる順位を取得しています。これには、Rank メソッドを利用しています。
コードを実行すると、下図のように順位を取得できます。
SortオブジェクトでSortする
次に、乱数から得られた順番を昇順でならべ変えます。使うのはSortオブジェクトになります。
Excel2003までは、Sortメソッドで並べ替えを行っていましたが、Excel2007からは、Sortオブジェクトが追加されました。
Sub 並べ替えSORT() Set sheetobj3 = ThisWorkbook.Worksheets("sekijyun3") With sheetobj3 '並べ替え条件の設定 .Sort.SortFields.Clear .Sort.SortFields.Add Key:=Range("D2"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal End With With sheetobj3.Sort '並べ替えの実行 .SetRange Range("A1:D41") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Subコードを実行すると、下図のようになります。