Vba 将旋转循环到Excel单元格中
我有一个用户数据库(带有一个数字分配)和一个Excel项目列表,我正在成功地将它们放入两个数组中。一个是用户数组,另一个是Excel中的项目(任务)。我正在尝试思考表示此场景的逻辑: 数据库中的用户可以使用数字0-5存在。基本上,这表示一周中他们休息了多少天,并且有助于划分每个人可以获得的Excel范围内的项目数量,以便正确地按比例分配项目(在我使用布尔指示器指示包含或排除之前)。例如:Vba 将旋转循环到Excel单元格中,vba,excel,loops,Vba,Excel,Loops,我有一个用户数据库(带有一个数字分配)和一个Excel项目列表,我正在成功地将它们放入两个数组中。一个是用户数组,另一个是Excel中的项目(任务)。我正在尝试思考表示此场景的逻辑: 数据库中的用户可以使用数字0-5存在。基本上,这表示一周中他们休息了多少天,并且有助于划分每个人可以获得的Excel范围内的项目数量,以便正确地按比例分配项目(在我使用布尔指示器指示包含或排除之前)。例如: User | Present # ------------------- Jared | 0 'p
User | Present #
-------------------
Jared | 0 'present daily
John | 0 'present daily
Mary | 1 'off 1 day
Tom | 5 'off rotation entirely
问题是:什么是最好的方式将其与他们应该得到的总体项目数量联系起来
我希望Jared
和John
得到最多,Mary
少一点,Tom
永远不会被包括在内。假设我有50件物品
我想到的一种方法是,在将名称循环到Excel中时,每次我从数组顶部开始算起时,将其作为“通过”(分配到Excel单元格中)
每次传递都不会跳过具有0的任何人
每过4次都会跳过一次1
每过三次都会跳过2分的任何人
每过2次都会跳过3分的任何人
每过一次都会跳过一个4
任何有5分的人都不包括在内(简单)
以我为例,Jared
和John
将始终被使用,Mary
将每四次跳过一次,而Tom
将永远不会被使用
这有意义吗?捕捉每N次通过数组的循环的最佳方法是什么?
我这样做是否正确?这并不完全有意义,因为您似乎每周都要分配任务,每天一项: 每次传递都不会跳过具有0的任何人 每过4次都会跳过一次1 每过三次都会跳过2分的任何人 每过2次都会跳过3分的任何人 每过一次都会跳过一个4 任何有5分的人都不包括在内(简单) 但是,假设上述情况,当用户的个人
任务分配sattested Mod(6-Present#)=0
时,您将跳过用户
也许你需要:
具有0的任何人都不会被跳过
每5次通过都会跳过一次1
每5次传球都会跳过2次
每过5次,任何人都会被跳过3次
每过5次,任何人都会被跳过4次
任何带5的人都会被跳过
假设上述情况,当用户的个人5-Present#
小于其个人taskassignmentsattentmod 5
时,您将跳过用户
使用这两种方法之一,您需要跟踪每个用户尝试分配(成功或失败)的次数以及实际分配。为了避免大量循环以及由此可能导致的延迟,我建议计算“需求系数”。
根据可用性分配50个项目(示例中)。可用性显示为
0
每天呈现到5
完全不轮换,但更容易用其他方式处理这些可用性:“不轮换”没有可用资源,因此0
,“当前每天”有所有工作日(?)可用,因此5
用户| Present#表将变成:
Jared 5
John 5
Mary 4
Tom 0
14
杰瑞德5
约翰5
玛丽4
汤姆0
14
因此,14个工作日可涵盖50个项目,平均每人每天3.57个项目。假设每人每天有3件物品且超过8件,则无法拆分该物品。通过将(修订的)表格值乘以INT(项目总数/表格总数),可以一次性分配“各3个”。因此,对于Jared和John,结果是5x3=15,对于Mary,结果是4x3=12
虽然只占42个,但还有8个尚未分配。3,3,2“额外”是显而易见的(结果是18,18,14),但编程并不是那么容易。我建议在INT公式中有任何剩余的地方,然后使用其结果+1(即这里是4而不是3)接受20,20,16,0(6太多)的初步结果,然后在每个用户中循环敲除1次(如果可能),直到敲除6次。你能再解释一下你是如何做到的:“5>15,5>15,4>12”吗?我了解倒过来和除法。如果你只有5个数字,那么我会使用嵌套的
If
s或Select Case
。然后使用计数器循环,当计数器达到任务量时重置或退出。While
循环在这里是有效的。然后使用具有like(用户,循环#)的2D数组,并从循环#中减去每个过程。如果Loop#=0,则添加一个任务并将Loop#重置到用户号码中。@pnuts是否提供您的评论作为答案?
Jared 5
John 5
Mary 4
Tom 0
14