|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
排班排课似乎要用到很复杂的算法,我不会。
下面贴一个笨的,随机生成
- Sub 排课()
- arr = Sheet1.[a1].CurrentRegion
- Range("O2:O100").Clear
- Set d = CreateObject("scripting.dictionary")
- '随机生成一组结果,以数字1-10表示10位老师
- 1: Do While d.Count < 10
- a = WorksheetFunction.RandBetween(1, 10)
- If Not d.exists(a) Then
- n = n + 1
- d(a) = n
- End If
- Loop
- '验证是否符合条件
- For i = 2 To UBound(arr)
- m = Application.Index(d.keys, i - 1)
- If arr(i, m + 2) = 1 Then
- k = k + 1
- If k = 10 Then GoTo 2 '全部符合条件,跳到2输出结果
- Else
- d.RemoveAll
- k = 0
- GoTo 1 '不符合条件,跳到1重新生成一组结果
- End If
- Next i
- '输出结果
- 2:
- ReDim brr(1 To 10)
- For Each kk In d.keys
- k1 = k1 + 1
- brr(k1) = arr(1, kk + 2)
- Next kk
- Sheet1.Range("O2").Resize(UBound(brr)) = Application.Transpose(brr)
- Set d = Nothing
- End Sub
复制代码
|
|