|
楼主 |
发表于 2017-9-25 16:41
|
显示全部楼层
本帖最后由 苏子龙 于 2017-9-26 08:30 编辑
- Sub RedPackage()
- Dim ar(), SumHe#, i%, n%, TemCount
- Dim RedPkgMoney#, RedPkgCount%, TemMaxMoney%
- RedPkgMoney = [c2]: RedPkgCount = [d2] '初始化,提取红包数据并判断
- If RedPkgMoney = 0 Or RedPkgCount = 0 Then Exit Sub
- If RedPkgMoney > 200 Then MsgBox "最大200元": Exit Sub
- If RedPkgCount > 100 Then MsgBox "最多发100个": Exit Sub
- If RedPkgMoney / RedPkgCount < 0.01 Then MsgBox "最少发0.01元": Exit Sub
- ReDim ar(1 To RedPkgCount, 1 To 3) '定义数组,1是随机金额,2辅助排序,3最后的金额
-
- For i = 1 To RedPkgCount - 1 '循环数量-1
- TemCount = Int(Rnd * (RedPkgCount - i - 1)) + 1 '随机分多少次
- TemMaxMoney = RedPkgMoney * 100 - SumHe * 100 - RedPkgCount + i '随机临时本次最大金额
- TemMaxMoney = Int(TemMaxMoney / TemCount) '再随机取最大金额
- TemMaxMoney = IIf(TemMaxMoney < 1, 1, TemMaxMoney) '判断:最少分的0.01元
- ar(i, 1) = Application.RandBetween(1, TemMaxMoney) / 100 '随机金额
- SumHe = ar(i, 1) + SumHe '已分金额总计
- Next
- ar(RedPkgCount, 1) = RedPkgMoney - SumHe '最后分的金额
- i = 1 '用do,loop循环,已分金额再随机排序
- Do While i <= RedPkgCount
- n = Int(Rnd * RedPkgCount) + 1
- If ar(n, 2) = "" Then
- ar(n, 2) = n
- ar(i, 3) = ar(n, 1)
- i = i + 1
- End If
- Loop
- Range("a:a").ClearContents
- Range("a1").Resize(RedPkgCount, 1) = Application.Index(ar, , 3)
- End Sub
复制代码
常规想法做的vba |
|