在不同的列值的动态分布

问题描述 投票:1回答:2
  1. 我们有不同数量的改变,每学期学生。它是在塔(A)的“学生”。根据学生的人数,我们或多或少都有“教师”,这是在柱(B)。因此,他们也并不固定。
  2. 这些学生在学期中去通过六个固定模块。他们必须通过每个模块有不同的老师,这样他们就可以不再重复了。而老师必须有学生的人数均衡,不需要是精确的,大致分布。
  3. 然后,我创建了学生和教师,并与模块表的名单。随着功能“COUNTA”我知道我有多少项目在每个列表,并使用功能“OFFSET”我动学生的名字到模块的“黑客帝国”的第一列。这两个名单,如果他们有在末尾添加名称,将修改矩阵。
  4. 我需要的是分布在模块的列老师,但最多只能给学生的最大数量,重复序列,因为它涉及到了尽头。例如,我被使用(F2)式 - 与ARRAYFORMULA和ISBLANK - 其中在列(B)中列出八个教师分布在柱(F - 模块1),但是它停止在最后一个。我需要这种分布继续被重复,直到在E列的最后一个学生(T1,T2,T3,...,T8,T1,T2,T3,...)
  5. 此外,我需要在其他模块太该分布,但以下起始上的“教师下面”(下面一行,只有第一个),如在工作表的例子:在模块2,从教师2 ;在模块3与教师3,依此类推到模块6(在模块2:例如:T2,T3,T4,...,T8,T1,T2,T3,...)
  6. 定型化,它必须是一种方式,当我在列(B)柱(A)或教师新增学生,矩阵将进行动态调整。

我不知道哪里去超越我得到任何帮助将是非常欢迎的。我认为,通过谷歌应用程序脚本会更可行,我至今读,但我将不得不开始从一开始这方面的研究。但是,OK,如果是这样的方式来解决这个问题。

Google Sheet Example

google-sheets spreadsheet
2个回答
1
投票

如果公式是优选的,在F2:

=ArrayFormula(vlookup(mod(row(indirect("a1:a"&counta(A2:A)))+transpose(ROW(indirect("a1:a"&counta(F1:1))))-2,counta(B2:B))+1,{row(B2:B)-1,B2:B},2,false))

enter image description here


1
投票

是的,这可以与谷歌Apps脚本来完成。

在JavaScript中,你可以实现类似的规定:

var array = [[1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6]];
var teacherCounter = 0;
var modules = 6;
var teachers = 8;
var students = array.length;

for (var i = 0; i < modules; i++) {
  teacherCounter = i;
  for (var j = 0; j < students; j++) {
    if (teacherCounter < teachers) {
      array[j][i] = "T" + (teacherCounter + 1);
      teacherCounter++;
    } else {
      teacherCounter = 0;
      array[j][i] = "T" + (teacherCounter + 1);
      teacherCounter++;
    }
  }
}

它返回下面的数组:

array = [["T1", "T2", "T3", "T4", "T5", "T6"],["T2", "T3", "T4", "T5", "T6", "T7"], ["T3", "T4", "T5", "T6", "T7", "T8"]];

这是那种你在找什么?

© www.soinside.com 2019 - 2024. All rights reserved.