Google表格:在不同列中动态分配值

时间:2019-02-03 12:19:10

标签: google-sheets spreadsheet

早上好。我对Google表格和MS Excel具有基本的了解,我正在帮助我的一些老师朋友开发一些系统,以使用Google工具自动完成他们的工作。对于这个当前的工具,我已经尝试并搜索了几种解决方案,但是我找不到任何可以帮助我找到解决方案的东西。

这种情况:(在访问此工作表的底部链接,可以在线编辑或下载该工作表):

  1. 我们每学期都有不同数量的学生在变化。它在(A)列“学生”中。根据学生的数量,我们在(B)列中拥有或多或少的“老师”。因此,它们也不是固定的。

  2. 这些学生在学期中将经历6个固定模块。他们必须通过不同的老师指导每个模块,因此他们不能重复。而且老师必须有均衡的学生人数,而不必是精确的,近似的分布。

  3. 然后,我创建了学生和教师的列表以及带有模块的表格。使用“ COUNTA”功能,我知道每个列表中有多少个项目,使用“ OFFSET”功能,将学生的姓名移动到模块“矩阵”的第一列。如果两个列表的末尾都添加了名称,则会修改矩阵。

  4. 我需要的是在模块的列中分配教师,但最多只能分配最大数量的学生,并在结束时重复该顺序。例如,我在(F2)中使用了一个公式-Arrayfromula和Isblank-其中(B)列中列出的8位教师分布在(F-模块1)列中,但它停在最后一个。我需要这种分配才能继续重复,直到E列中的最后一个学生(T1,T2,T3,...,T8,T1,T2,T3,...)

  5. 此外,我也需要在其他模块中进行此分发,但是下面的工作从“下面的老师”(下面的一行,只有第一个)开始,如工作表示例所示:在模块中2,从老师2开始;在模块3中与老师3一起,依此类推,直到模块6。(在模块2中:例如:T2,T3,T4,...,T8,T1,T2,T3,...)

    < / li>
  6. 最终确定,必须是当我在(A)列中添加学生或在(B)列中添加教师时,矩阵可以动态调整的方式。

我不知道该如何超越我所得到的,任何帮助将是非常欢迎的。我读过到目前为止,我认为通过Google App Script会更可行,但是随后我必须从头开始对该领域进行研究。好的,如果这是解决此问题的方法。

好,谢谢您的关注和帮助。

Google Sheet Example

2 个答案:

答案 0 :(得分:1)

是的,这可以通过Google 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"]];

您正在寻找的是这种东西吗?

答案 1 :(得分: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