Как мне совместить эти две формулы?

Пример

Я хочу объединить эти две формулы, но не могу сказать «и», не так ли?

Я хочу вывести таблицу с данными из исходных таблиц, имя листа которых проверено на листе FL-elever:

  • Формулы для присоединения:

введите здесь описание изображения

  • Проверенные имена для фильтрации:

введите здесь описание изображения

  • Формат исходных таблиц:

введите здесь описание изображения


person Allan Bech    schedule 21.02.2020    source источник
comment
О каких формулах вы говорите?   -  person Iamblichus    schedule 21.02.2020
comment
Взгляните на желаемый выходной лист   -  person Allan Bech    schedule 21.02.2020
comment
Вы можете объяснить, каков желаемый результат?   -  person Iamblichus    schedule 21.02.2020
comment
1-я формула проверяет отмеченные имена в Имена-листе. Вторая формула отображает объединенное представление трех таблиц Prename. Я пытаюсь сделать вторую формулу динамической, чтобы в нее включались только проверенные имена.   -  person Allan Bech    schedule 21.02.2020


Ответы (1)


Это можно сделать с помощью пользовательской функции скрипта приложений.

Сначала откройте связанный скрипт, выбрав Tools > Script editor, и скопируйте в скрипт следующую функцию (проверьте встроенные комментарии):

function POPULATE_TABLE() {
  var output = new Array(6).fill("").map(function() { 
    return new Array(5).fill(""); // Initialize the 2D array you will output
  });
  var ss = SpreadsheetApp.getActive();
  // Get the rows in which checkbox is marked:
  var FLelever = ss.getSheetByName("FL-elever");
  var checkedNames = FLelever.getDataRange().getValues().slice(1).filter(function(row) {
    return row[5] === true;
  });
  checkedNames.forEach(function(checkedName) { // Iterate through each row with marked checkbox
    var sheetName = checkedName[0] + "-" + checkedName[1]; // Get sheet name (column A + "-" + column B)
    var sheet = ss.getSheetByName(sheetName); // Get corresponding sheet
    if (sheet) { // Check that sheet exists
      // Get the source table from the corresponding sheet:
      var firstRow = 2;
      var firstCol = 2;
      var numRows = sheet.getLastRow() - firstRow + 1;
      var numCols = sheet.getLastColumn() - firstRow + 1;
      var values = sheet.getRange(firstRow, firstCol, numRows, numCols).getValues();
      // Iterate through the source table and add the existing values to output:
      for (var i = 0; i < values.length; i++) {
        for (var j = 0; j < values[i].length; j++) {
          if (output[i][j] !== "" && values[i][j] !== "") {
            output[i][j] = output[i][j].concat(", ");
          }
          output[i][j] = output[i][j].concat(values[i][j]); // Concatenate values
        }
      }
    }    
  });
  return output;
}

После того, как он определен, вы можете использовать эту функцию так же, как и любую встроенную функцию листов:

введите здесь описание изображения

Ссылка:

person Iamblichus    schedule 21.02.2020
comment
Хорошо, я пробовал ваше решение по сценарию, и хотя оно работает, оно слишком сложно для меня и этого проекта. Я, конечно, приму ваш ответ, но я далек от желаемого результата. Я добавлю новый - измененный - вопрос. - person Allan Bech; 22.02.2020