teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

コード微修正

2020/09/26 01:51

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -68,7 +68,7 @@
68
68
  ' 宣言例 Dim MyArray As Variant '
69
69
  ' 目的 : 配列をランダムに並べ替える        '
70
70
  ' 戻り値 : なし '
71
- ' 使用例  : AryShuffle(MyArray) '
71
+ ' 使用例  : Call AryShuffle(MyArray) '
72
72
  '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
73
73
  Public Sub AryShuffle(ByRef MyAry)
74
74
  Dim i As Integer, buf, UB As Integer, P As Integer

1

コード追記

2020/09/26 01:51

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -29,4 +29,58 @@
29
29
  配列にセル番地を格納しておいて、上記の関数でシャッフルします。
30
30
  Forループ処理で順にセル番地に名前を転記していきます。
31
31
 
32
- これだと作業シートを使わずできます。
32
+ これだと作業シートを使わずできます。
33
+
34
+ この方法でコードを書いてみたのでご参考に。
35
+
36
+ ```vba
37
+ Public Sub SetSeatingChart()
38
+ Dim SeatList As String 'セル番地をカンマ区切りで格納
39
+ SeatList = _
40
+ "N11,N15,N19,N23,N31,N35,N39,N43," & _
41
+ "R11,R15,R19,R23,R31,R35,R39,R43," & _
42
+ "W11,W15,W19,W23,W31,W35,W39,W43," & _
43
+ "AF11,AF15,AF19,AF23,AF31,AF35,AF39,AF43," & _
44
+ "AF11,AF15,AF19,AF23,AF31,AF35,AF39,AG43," & _
45
+ "AP19,AP23,AP31,AP35," & _
46
+ "AI19,AI23,AI31,AI35," & _
47
+ "AT11,AT15,AT19,AT23,AT31,AT35,AT39,AT43," & _
48
+ "AY11,AY15,AY19,AY23,AY31,AY35,AY39,AY43," & _
49
+ "BC11,BC15,BC19,BC23,BC31,BC35,BC39,BC43," & _
50
+ "BH11,BH15,BH19,BH23,BH31,BH35,BH39,BH43," & _
51
+ "BL11,BL15,BL19,BL23,BL31,BL35,BL39,BL43"
52
+
53
+ Dim ArySeat
54
+ ArySeat = Split(SeatList, ",") '配列に変換
55
+ Call AryShuffle(ArySeat) '配列をシャッフル
56
+
57
+ Dim AryName
58
+ AryName = Range("A1:A88").Value 'A1:A87セルに名前が記入されているとする
59
+
60
+ Dim i As Long
61
+ For i = LBound(ArySeat) To UBound(ArySeat)
62
+ Range(ArySeat(i)).Value = AryName(i + 1, 1)
63
+ Next
64
+ End Sub
65
+
66
+ '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
67
+ ' 引数 : バリアント配列、動的配列、配列 '
68
+ ' 宣言例 Dim MyArray As Variant '
69
+ ' 目的 : 配列をランダムに並べ替える        '
70
+ ' 戻り値 : なし '
71
+ ' 使用例  : AryShuffle(MyArray) '
72
+ '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
73
+ Public Sub AryShuffle(ByRef MyAry)
74
+ Dim i As Integer, buf, UB As Integer, P As Integer
75
+ If IsNull(MyAry) Then Exit Sub
76
+
77
+ Randomize
78
+ UB = UBound(MyAry)
79
+ For i = UB To 1 Step -1
80
+ P = Int((i + 1) * Rnd)
81
+ buf = MyAry(P)
82
+ MyAry(P) = MyAry(i)
83
+ MyAry(i) = buf
84
+ Next
85
+ End Sub
86
+ ```