
ランダムな席順を作る Excel2013 マクロ講座 79回
前回は、机に順番に番号をふるというマクロを作りましたが、席替えをする場合は、ランダムな席順が良いということもあります。
あるいは、何かの作業グループなどを作るときは、ランダムな方がいいですよね。
そこで今回は乱数を発生させて、その数値を利用して席順を作ります。
(サンプルファイルは、こちらから マクロ79回サンプルデータ)


Public sheetobj1 As Worksheet 'ワークシートを代入するオブジェクト変数
Public sheetobj2 As Worksheet '〃
Sub 乱数だけ() 'ランダムな値を発生させる
Dim ra As Integer '
Set sheetobj2 = ThisWorkbook.Worksheets("sekijyun2")
With sheetobj2
For ra = 2 To 41 '2行目から最終行まで
.Cells(ra, 2).Value = Rnd
Next
End With
End Sub
Sub 順番だけ() 'C列に順番を入力
Dim ra As Integer '
Set sheetobj2 = ThisWorkbook.Worksheets("sekijyun2")
With sheetobj2
For ra = 2 To 41
.Cells(ra, 3).Value = WorksheetFunction.Rank(.Cells(ra, 2).Value, .Range("B2:B41"), 0)
Next ra
End With
End Sub
マクロを実行すると下図のようになり、生徒番号の列に順番が入力されます。

Sub 配列()
Dim k As Integer
Dim ban(1 To 40) As Integer '生徒番号を要素40個の配列にする
Set sheetobj2 = ThisWorkbook.Worksheets("sekijyun2")
With sheetobj2
For k = 1 To 40
ban(k) = .Cells(k + 1, 3) '順番に代入していく
Next k
End With
End Sub
今までのコードを一つにまとめると、以下のコードになります。前半では、With sheetobj2で、作業シート用のマクロを記述し、
後半では、With sheetobj1で席順シート用のマクロを記述しています。
Public sheetobj1 As Object 'ワークシート
Public sheetobj2 As Object 'ワークシート
Sub 出席番号で席替え()
Dim ra As Integer, k As Integer, i As Integer, j As Integer
Dim ban(1 To 40) As Integer '生徒番号を要素40個の配列にする
Set sheetobj2 = ThisWorkbook.Worksheets("sekijyun2")
Set sheetobj1 = ThisWorkbook.Worksheets("sekijyun")
With sheetobj2
For ra = 2 To 41 '2行目から最終行まで
.Cells(ra, 2).Value = Rnd '乱数を発生させる
Next
For ra = 2 To 41 '大きい順から番号をつける
.Cells(ra, 3).Value = WorksheetFunction.Rank(.Cells(ra, 2).Value, .Range("B2:B41"), 0)
Next ra
For k = 1 To 40
ban(k) = .Cells(k + 1, 3) '配列に番号を代入していく
Next k
End With
k = 1
With sheetobj1
For i = 1 To 8
For j = 1 To 5
.Cells(i, j).Value = ban(k) '机に見立てたセルに配列の番号を入れる
k = k + 1
Next j
Next i
End With
End Sub