将旋转循环到Excel单元格中

时间:2013-08-01 18:20:34

标签: excel vba excel-vba loops

我有一个用户数据库(带有编号分配)和一个Excel列表,列出了我成功进入两个数组的项目。一组用户,另一组来自Excel(任务)。我试图想出代表这种情况的逻辑:

DB中的用户可以使用数字0-5存在。基本上这表示他们在一周内休息了多少天,并帮助分解每个人可以获得的Excel范围中的项目数量,以便正确比例项目(在我使用布尔指示符指示包含或排除之前) 。例如:

User   |  Present #
-------------------
Jared  |  0 'present daily
John   |  0 'present daily
Mary   |  1 'off 1 day
Tom    |  5 'off rotation entirely

问题是:将这与他们应该获得的项目总数相关联的最佳方式是什么?

我希望JaredJohn得到最多,Mary少一点,Tom永远不会被包含在内。假设我有50个项目。

我想到的一种方法是,在将名称循环到Excel中时,每次从数组顶部开始作为“传递”(在分配到Excel单元格时)进行计数。

    Anyone with a 0 is never skipped through each pass
    Anyone with a 1 is skipped every 4th pass
    Anyone with a 2 is skipped every 3rd pass
    Anyone with a 3 is skipped every 2nd pass
    Anyone with a 4 is skipped every other pass
    Anyone with a 5 is never included (easy)

对于我的示例,始终会使用JaredJohn,每四次传递将跳过Mary,并且永远不会使用Tom

这有意义吗? 每隔N次捕获数组循环的最佳方法是什么? 我是否以正确的方式解决这个问题?

2 个答案:

答案 0 :(得分:1)

为了避免大量循环以及这可能导致的延迟,我建议计算一个“需求因子” 根据可用性分配50个项目(在示例中)。可用性每天显示为0完全显示为5轮换,但反过来更容易使用这些内容:'off rotation'没有可用的资源,因此0和'now daily'有所有工作日(?)可用,所以5

用户|现在#table将成为:

 
Jared   5
John    5
Mary    4
Tom     0
      14

所以14个人日可以容纳50个项目,平均每人每天3.57个项目。假设一个项目不能拆分,即每人每天3项,超过8项。通过将(修订的)表值乘以INT(item_total / table-total),可以在一次通过中分配'3 each'。所以对于贾里德和约翰来说,结果是5x3 = 15,玛丽4x3 = 12。

虽然只有42个,但还有8个尚未分配。 3,3,2'额外'是显而易见的(导致18,18,14),但编程并不那么容易。我建议INT公式中有任何残差,然后使用它的结果+1(即这里4而不是3)接受20,20,16,0(6太多)的初步结果然后循环每个用户敲1关闭(如果可能的话),直到6人被击倒。

答案 1 :(得分:0)

这并不完全有意义,因为您似乎每周分配一个任务:

  

每个传球都不会跳过任何0的人

     

任何有1的人都会被第4次传递

     

每次第3次传球都会跳过任何2的人

     

每次第二次传球都会跳过任何有3的人

     

每隔一次传球都会跳过任何一个4的人

     

任何拥有5的人都不会被包括在内(简单)

但是,假设上述情况,您在个人TaskAssignmentsAttempted Mod (6 - Present#) = 0时跳过用户。

也许你需要:

  

永远不会跳过任何0的人

     

任何一个1的人每5次传球被跳过

     

任何有2的人每5次传球被跳过两次

     

任何一个3的人每5次传球被跳过3次

     

任何一个4的人每5次传球被跳过4次

     

任何有5的人都会被跳过。

假设上述情况,当您的个人5 - Present#小于其个人TaskAssignmentsAttempted Mod 5时,您会跳过用户。

使用其中任何一个,您需要跟踪每个用户进行分配尝试的次数(成功与否)以及实际分配。