Динамическое распределение значений в разных столбцах - PullRequest
0 голосов
/ 03 февраля 2019
  1. У нас разное количество студентов, которое меняется каждый семестр.Это в колонке (А) «студенты».В зависимости от количества студентов, у нас есть более или менее «учителя», которые находятся в столбце (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. В заключение, должен быть способ, которым, когда я добавляю студентов в столбце (A) или учителей в столбце (B), матрица будет динамически корректироваться.

Я не знаю, куда идти дальше того, что я получил, и любая помощь будет очень кстати.Я думаю, что через Google App Script было бы более жизнеспособным, я читал до сих пор, но тогда мне придется начать исследование в этой области с самого начала.Но хорошо, если это способ решить эту проблему.

Пример Google Sheet

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Если формула предпочтительна, в 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

0 голосов
/ 03 февраля 2019

Да, это можно сделать с помощью скрипта Служб Google.

В 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"]];

Это то, что вы ищете?

...