「重複しない乱数」は乱数とはいいません。
この場合は、「ランダムに並べ替える」と考えましょう。プログラム界ではシャッフルといいます。
シャッフルするには、いろいろ方法はありますが、エクセルなら、
作業用シートに縦一列にセル番地を記入しておきます。
N11
N15
N19
N23
・
・
これをシャッフルするには、下記で紹介しているような方法を使います。
エクセル ランダムに並び替えをする
シャッフルができたら、この列のとなりに順に席を割り当てたい人の名前を入力する(どこかに名前の一覧があるならそれをコピーする)。
名前をセル番地をもとに、座席表に転記しておく。
というようなマクロ(VBA)を組めばいいでしょう。
作業シートを使わない別案
下記で配列をシャッフルする関数を紹介しています。
配列をランダムに並べ替える関数 - hatena chips
配列にセル番地を格納しておいて、上記の関数でシャッフルします。
Forループ処理で順にセル番地に名前を転記していきます。
これだと作業シートを使わずできます。
この方法でコードを書いてみたのでご参考に。
vba
1Public Sub SetSeatingChart()
2    Dim SeatList As String 'セル番地をカンマ区切りで格納
3    SeatList = _
4    "N11,N15,N19,N23,N31,N35,N39,N43," & _
5               "R11,R15,R19,R23,R31,R35,R39,R43," & _
6               "W11,W15,W19,W23,W31,W35,W39,W43," & _
7               "AF11,AF15,AF19,AF23,AF31,AF35,AF39,AF43," & _
8               "AF11,AF15,AF19,AF23,AF31,AF35,AF39,AG43," & _
9               "AP19,AP23,AP31,AP35," & _
10               "AI19,AI23,AI31,AI35," & _
11               "AT11,AT15,AT19,AT23,AT31,AT35,AT39,AT43," & _
12               "AY11,AY15,AY19,AY23,AY31,AY35,AY39,AY43," & _
13               "BC11,BC15,BC19,BC23,BC31,BC35,BC39,BC43," & _
14               "BH11,BH15,BH19,BH23,BH31,BH35,BH39,BH43," & _
15               "BL11,BL15,BL19,BL23,BL31,BL35,BL39,BL43"
16
17    Dim ArySeat
18    ArySeat = Split(SeatList, ",") '配列に変換
19    Call AryShuffle(ArySeat)       '配列をシャッフル
20
21    Dim AryName
22    AryName = Range("A1:A88").Value  'A1:A87セルに名前が記入されているとする
23
24    Dim i As Long
25    For i = LBound(ArySeat) To UBound(ArySeat)
26        Range(ArySeat(i)).Value = AryName(i + 1, 1)
27    Next
28End Sub
29
30'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
31' 引数      : バリアント配列、動的配列、配列                    '
32'               宣言例 Dim MyArray As Variant                   '
33' 目的      : 配列をランダムに並べ替える                 '
34' 戻り値    : なし                                              '
35' 使用例   : Call AryShuffle(MyArray)                               '
36'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
37Public Sub AryShuffle(ByRef MyAry)
38Dim i As Integer, buf, UB As Integer, P As Integer
39    If IsNull(MyAry) Then Exit Sub
40     
41    Randomize
42    UB = UBound(MyAry)
43    For i = UB To 1 Step -1
44        P = Int((i + 1) * Rnd)
45        buf = MyAry(P)
46        MyAry(P) = MyAry(i)
47        MyAry(i) = buf
48    Next
49End Sub
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/26 03:16