エクセルのVBAについて質問です やりたいこと 1週間(5日間)で10人のうち5人は洗濯当番、残りの5人から掃除当番をランダムで決めたいです
エクセルのVBAについて質問です やりたいこと 1週間(5日間)で10人のうち5人は洗濯当番、残りの5人から掃除当番をランダムで決めたいです 下記のコードでは10人のうちランダムで5人に掃除は割り振れるのですが、これに加えて残りの5人に洗濯を割り振るコードを教えていただけないでしょうか Sub 当番表() Dim 人数 As String 人数 = Range("A1").Value 'A1には10の数字が入っています Dim 日数 As Long 日数 = Range("A2").Value 'A2には5の数字が入っています Const 一日人数 = 1 ReDim 回数(1 To 人数) Randomize ' 最大回数を計算 --- (*1) 最大回数 = WorksheetFunction.RoundUp(日数 * 一日人数 / 人数, 0) ' 回数を初期化 For i = 1 To 人数 回数(i) = 0 Next Call 休み以外クリア ' --- (*2) ' 二週間分の予定を作る --- (*3) For i = 1 To 日数 For j = 1 To 一日人数 Result = False For k = 1 To 100 ' ランダムに一人を選ぶ --- (*4) r = Int(Rnd * 人数) + 1 ' すでに選択済みか休みなら選び直し --- (*5) v = Sheet1.Cells(2 + i, 1 + r) If v <> "" Then GoTo Continue ' 最大回数を超えていたら選び直し If 最大回数 < (回数(r) + 1) Then GoTo Continue ' 表に当番であることを書き込む Sheet1.Cells(2 + i, 1 + r) = "掃除" 回数(r) = 回数(r) + 1 Result = True Exit For Continue: Next If Result = False Then MsgBox "作表失敗しました。やり直してください" Exit Sub End If Next Next End Sub
Visual Basic | プログラミング・45閲覧