Ms access 在多个集合中均匀分布值 背景/背景:

Ms access 在多个集合中均匀分布值 背景/背景:,ms-access,vba,Ms Access,Vba,我有一个表,其中列出了学校的列表,每个学校都有一个地理区域和一些需要联系的学生: school_id, region, student_count 1, West, 23 2, Central, 33 3, East, 55 4, West, 7 5, West, 18 6, Central, 45 7, Central, 15 8, West, 32 Etc. Etc… (there are ~1500 schools) 所有学校都将指派一组支持人员,负责向每所学校的学生发送信函 学校分布

我有一个表,其中列出了学校的列表,每个学校都有一个地理区域和一些需要联系的学生:

school_id, region, student_count
1, West, 23
2, Central, 33
3, East, 55
4, West, 7
5, West, 18
6, Central, 45
7, Central, 15
8, West, 32
Etc.
Etc… (there are ~1500 schools)
  • 所有学校都将指派一组支持人员,负责向每所学校的学生发送信函
  • 学校分布(按地区)和学生人数(所有学校)必须尽可能平均分配。也就是说,如果有5名辅助人员,则按地区划分的学校和每个人员的学生人数应尽可能(接近)相等。也就是说,每个地区的学校总数和学生人数将有所不同,即,地区数量和学生人数永远不会相等
具体问题: 我假设解决方案需要将学校按地区划分(分为列表),然后将这些学校的价值分配给支持人员。最终结果将写入一个名为
staff\u assignment
的表中:

staff_id, school_id
1, 1
1, 6
1, 3
2, 8
2, 7
2, 4
Etc.
Etc…
因此,我需要在n个集合中平均分配3个值列表。3个列表的分布需要(尽可能接近)相等 用于分配的项目数量以及每组的总值。例如:

List 1 [27, 55, 34, 15, 8, 22, 17, 9, 13, 5, 25, 16, 36, 6, 17, 26, 37]
List 2 [10, 32, 46, 24, 19, 23, 14, 51, 41, 12, 18, 64, 9, 11]
List 3 [11, 49, 30, 29, 25, 20, 9, 13, 50, 12, 32, 39, 18, 12, 21, 33, 20, 15, 23, 11]

would be distributed amongst (in this case) 5 sets as:

Set 1 [L1.27, L2.24, L3.25, etc., etc.]
Set 2 [L1.55, L2.64, L3.49, etc., etc.]
Set 3 [L1.34, L2.32, L3.33, etc., etc.]
Set 4 [L1.15, L2.14, L3.15, etc., etc.]
Set 5 [L1.8, L2.9, L3.9, etc.,etc.]
我通过MS Access表单实现此功能,因此解决方案将使用VBA完成(列表值和分发集数量将通过表单从用户输入中获得)


我搜索了这个站点和网络,还有一些解决方案,但是它们都是其他编程语言(例如C++、露比),我没有经验(我是一个内部的资源),他们知道,只需要一个被要求对这类问题进行解决的人。所以,我只是希望这里有一位黑带VBA大师,能够解释如何在VBA中做同样的事情

您的输入来源是什么?从本质上讲,VBA中没有列表或集合结构。为什么是MS Access?您需要在数据库中存储吗?请给出您的问题的完整上下文,因为这听起来像一个。您是否可以将所有列表中的所有值插入到一个一栏表中,然后对该表运行查询,按列排序,然后将该记录集划分为n个部分?我是不是把问题简单化了?嗨,冻糕。谢谢(再次)跟进。我使用MS Access是因为我需要GUI、表和报告(我在MS Access中很熟悉)。我希望我的编辑提供适当的上下文。这是一个有趣的问题。因此,大约有1500所学校,每个学校都有
n
名学生。这个地区重要吗?如果将
n
和除以教职员工人数,然后对整个学校列表进行降序排序,并迭代将该学校分配给分配了最少学生的教职员工,您认为会发生什么?一旦一名员工点击
n/staff
编号,该员工将从接受新生的员工名单中删除。我只是在这里随地吐痰。嗨,托尼。谢谢你花时间考虑这个问题。是的,区域成分也必须(尽可能接近)平均分配,这就是(对我来说)一个复杂问题的原因。我一直在阅读各种帖子,这似乎类似于所谓的“垃圾箱分类”问题,然而,这是一个一维(将一个数量平均分配到垃圾箱中),因为我有两个维度要平均分配(按地区划分的学校数量和总体学生数量)。