以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]分班的问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=191377)

--  作者:jjjeyes
--  发布时间:2024/4/13 13:53:00
--  [求助]分班的问题
我有一个表格"测试"中A列为人员姓名,人数为p,如下图:

图片点击可在新窗口打开查看此主题相关图片如下:11.png
图片点击可在新窗口打开查看
想要在B列将班级名称输入进去,班级名称放在集合lst里,每个班级的人数放在数组bs()里,数组里的所有数之和等于p。最终要得到以下的结果:

图片点击可在新窗口打开查看此主题相关图片如下:22.png
图片点击可在新窗口打开查看
请问这个循环怎么写

Dim Lst As New List(Of String) \'设定一个班级名集合
Dim p As Integer = Lst.Count \'设定班级总数量的变量
Dim n As Integer = Tables("测试").Rows.Count \'总人数
Dim bs(p) As Integer\'设定一个班级人数数组

For g As Integer = 0 To p - 1
    MessageBox.Show ( Lst(g) & "班人数:" & bs(g))
Next

For k As Integer = 0 To n - 1
    Dim r As Row = Tables("测试").Rows(k)
    r("B") = Lst(bs(g))
Next

--  作者:有点蓝
--  发布时间:2024/4/13 15:05:00
--  
把集合和数组的具体值发上来看看

Dim Lst As New List(Of String) \'设定一个班级名集合
Dim bs(p) As Integer\'设定一个班级人数数组

--  作者:jjjeyes
--  发布时间:2024/4/13 15:18:00
--  
Dim Lst As New List(Of String) \'设定一个班级名集合
lst(0)的值是“班级1
lst(1)的值是“班级2
lst(2)的值是“班级3
lst(3)的值是“班级4

Dim bs(p) As Integer \'设定一个班级人数数组
bs(0) = 8      是指班级1”有8人
bs(1) = 10    是指班级2”有10人
bs(2) = 7      是指班级3”有7人
bs(3) = 5      是指班级1”有5人


--  作者:有点蓝
--  发布时间:2024/4/13 15:52:00
--  
Dim t As Table = Tables("测试")
t.StopRedraw
For k As Integer = 0 To bs.length - 1
    t.filter = "B is null"
    For i As Integer = 0 To bs(k) - 1
        t.rows(i)("B") = Lst(k)
    Next
Next
t.Filter = ""
t.ResumeRedraw
[此贴子已经被作者于2024/4/13 17:15:39编辑过]

--  作者:jjjeyes
--  发布时间:2024/4/13 16:17:00
--  
看懂了,一句t.filter = "B is null"  好销魂
--  作者:有点蓝
--  发布时间:2024/4/13 16:37:00
--  
很多时候编程逻辑就是头脑风暴。想到每次都只需把班级为空的行,取前面n行赋值....
--  作者:jjjeyes
--  发布时间:2024/4/13 16:57:00
--  
还是不对,只能循环一次
--  作者:有点蓝
--  发布时间:2024/4/13 17:15:00
--  
我测试没有问题,请上传实例说明


图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看


--  作者:jjjeyes
--  发布时间:2024/4/14 14:00:00
--  
已经搞定,先前搞错了一个参数。班级人数数组bs(),里应该用n-1,我用的n