ランダムな席順に名前を入れる(前半)

マクロ講座 80回 
座席に名前をランダムの表示する

ランダムな席順に名前を入れる Excel2013 マクロ講座 80回

ランダムな名前で席替え

ランダムな席替えの名前版になります。前回(2013_macro_79.htm)は、席に生徒番号をランダムに割り当てるというものでした。
番号を割り当てるのでは、そっけないという場合や、番号を忘れた生徒はどうするのか、などという問題が起こるかもしれません。
そこで、今回は座席に名前を表示するというタイプの席変え版です。
(サンプルファイルは、こちらから マクロ80回サンプルデータ

名前で席替え

名前で席替えマクロのポイントは、乱数から得られた順番を昇順に並べ替えたことと、 1次元配列のデータ型をStringにして、生徒の名前を格納した点です。
ランダムな席順に名前を入れるマクロ1
使うシートは、名前を入力する席順用のシートと、名簿が記載された作業用のシートの2枚です。
作業用のシートには、A列に生徒番号(出席番号)B列に生徒名、C列はランダム値を入力するため、D列はランダム値から順位を得るために空欄となっています。 ランダムな席順に名前を入れるマクロ2

席替え用に乱数を生成する

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 メソッドを利用しています。
ランダムな席順に名前を入れるマクロ3
コードを実行すると、下図のように順位を取得できます。
ランダムな席順に名前を入れるマクロ4

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
コードを実行すると、下図のようになります。
ランダムな席順に名前を入れるマクロ5