|
楼主 |
发表于 2024-8-23 21:03
|
显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
弄了一个模拟窗口排队的程序,绿色提示可选择的排队位置
- Sub test()
- Dim m%, n%, arr()
- Dim s%, t%
- m = InputBox("排队人数?") '已排队人数
- n = InputBox("窗口个数?") '窗口个数
-
- Sheet1.Cells.Interior.Color = xlNone
- Sheet1.Cells.ClearContents
- Sheet1.[A1].Resize(1, n).Formula = "=""窗口"" & column(a1)"
-
- s = m \ n '队伍长度
- t = m Mod n '剩余几人
- If t > 0 Then s = s + 1 '有余数队伍长度+1(最大长度)
- ReDim arr(1 To s, 1 To n) '模拟排队情况数组
- For i = 1 To IIf(t > 0, s - 1, s)
- For j = 1 To n
- arr(i, j) = "●" '●代表一个人
- Next
- Next
-
- Dim myCol As New Collection
- For i = 1 To n
- myCol.Add i '将窗口编号加入集合
- Next
-
- Dim myIndex% '集合的索引
- Dim rndSelect% '随机选择的集合索引号
- If t > 0 Then '--------------对有余数情况的处理
- For i = 1 To t '对余数的人处理
- rndSelect = Int(Rnd * myCol.Count + 1) '随机选择集合的索引号
- myIndex = myCol(rndSelect) '根据索引得到窗口号
- arr(s, myIndex) = "●" '进入排队
- myCol.Remove (rndSelect) '删除索引对应的集合项目(已使用的窗口)
- Next
-
- '输出结果
- Sheet1.[A2].Resize(s, n).Value = arr
- For i = 1 To myCol.Count
- Sheet1.Cells(s + 1, myCol(i)).Interior.Color = RGB(127, 255, 127)
- Sheet1.Cells(s + 1, myCol(i)).Value = "True"
- Next
-
- Else '--------------对整除情况的处理
- Sheet1.Range("A2").Resize(s, n).Value = arr
- Sheet1.Range("A" & s + 2).Resize(1, n).Interior.Color = RGB(127, 255, 127)
- Sheet1.Range("A" & s + 2).Resize(1, n).Value = "True"
- End If
- End Sub
复制代码 |
|