[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
都用上Excel了,为什么不用VBA呢?
  1. Sub allocate2() '假设数据区域从大到小排序
  2. Dim employee(19), m(19)
  3. For i = 0 To 19
  4. Set employee(i) = CreateObject("Scripting.Dictionary")
  5. Next i
  6. Set lost = CreateObject("Scripting.Dictionary")
  7. NUM = Application.InputBox("请输入客户数:", "选择运算范围", 580, , , , , 9)
  8. If NUM < 20 Then MsgBox "请重新选择", , "选择有误!"
  9. avg = Application.WorksheetFunction.Sum(Range("b1:b" & NUM)) / 20
  10. guest = Range("a1:b" & NUM)
  11. i = -1
  12. For n = 1 To NUM
  13. flag = False
  14. t = 1
  15. Do While t <= 20
  16. i = (i + 1) Mod 20
  17. If m(i) + guest(n, 2) <= avg Then
  18. m(i) = m(i) + guest(n, 2)
  19. employee(i).Add guest(n, 1), guest(n, 2)
  20. flag = True
  21. Exit Do
  22. End If
  23. t = t + 1
  24. Loop
  25. If flag = False Then
  26. lost.Add guest(n, 1), guest(n, 2)
  27. End If
  28. Next n
  29. End Sub
复制代码

TOP

回复 23楼 的帖子

说明:
    程序运行结束,employee(i) 保存的是每个员工分得的客户情况,lost 则保存了未参与分配的客户记录。只要稍微改一下,完全可以满足楼主的要求的哦。
    至于每个员工的客户数是一次分配就予以填满,还是多次平均分配以达最佳效果,是不同的算法范畴,运行结果也稍有不同,在此不再赘叙。

TOP

附件:数值分配的问题2.xls.txt 是excel表格,改名成:数值分配的问题2.xls 就可以了。

TOP

返回列表