Google sheets 值在不同列中的动态分布
我们每个学期都有不同数量的学生。在(A)栏“学生”中。根据学生人数的不同,我们有更多或更少的“教师”,见(B)栏。因此,它们也不是固定不变的Google sheets 值在不同列中的动态分布,google-sheets,google-sheets-formula,array-formulas,gs-vlookup,Google Sheets,Google Sheets Formula,Array Formulas,Gs Vlookup,我们每个学期都有不同数量的学生。在(A)栏“学生”中。根据学生人数的不同,我们有更多或更少的“教师”,见(B)栏。因此,它们也不是固定不变的 这些学生在学期中要学习六个固定的模块。他们必须让不同的老师通过每个模块,这样他们就不能重复了。教师必须有一个均衡的学生人数,而不需要精确、近似的分布 然后,我创建了学生和教师的列表以及包含模块的表格。使用函数“COUNTA”,我知道每个列表中有多少项,使用函数“OFFSET”,我将学生的姓名移动到模块“矩阵”的第一列。如果两个列表的末尾都添加了名称,则它们
是的,这可以通过谷歌应用程序脚本完成 在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++;
}
}
}
这就是你想要的吗?是的,这可以通过谷歌应用程序脚本来完成 在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++;
}
}
}
这就是您想要的吗?如果首选公式,在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))
如果首选配方,在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))
是的,我想一定有这样的东西,但在我开始学习谷歌脚本和javascript时,我会保留它。无论如何,非常感谢你的帮助。是的,我想一定有这样的东西,但我会在我开始学习谷歌脚本和javascript时保留它。无论如何,非常感谢您的帮助。Tom,我已将此公式粘贴到F2单元格(并将逗号改为分号),但我收到此错误消息:“VLOOKUP返回超出范围的范围”。我修不好。可能是什么=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])错误意味着vlookup数组中只有一列,而不是两列,因此,当您说vlookup(…2;false)时,它尝试访问第二列并失败。我相信在您的语言环境中,您必须使用反斜杠(\)作为花括号中的水平数据分隔符{},因此公式应该是=数组形式(vlookup(mod(row(indirect)(“a1:a”&counta(A2:a)))+转置(row(indirect)(“a1:a”&counta(F1:1))-2;counta(B2:B))+1;{row(B2:B)-1\B2:B};2;false))。请看Tom,我已将此公式粘贴到F2单元格(并用逗号表示分号),但我收到了这个错误消息:“VLOOKUP返回的范围超出了范围”。我无法修复它。它可能是什么?=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))这个错误意味着你在VLOOKUP数组中只有一列而不是2列,所以当你说VLOOKUP(…2;false)时,它试图访问第二列,但失败了。我相信在你的语言环境中,你必须使用反斜杠(\)作为花括号{}中的水平数据分隔符,所以公式应该是=ArrayFormula(VLOOKUP)(mod(row(indirect)(“a1:a”)&counta(A2:A))+转置(行(间接(“a1:A”和counta(F1:1)))-2;counta(B2:B))+1;{ROW(B2:B)-1\B2:B};2;false))参见