Замените значение столбца G-Sheet, если значение столбца превышает пороговое значение, средним значением 'n' предыдущих значений в ячейке - PullRequest
1 голос
/ 23 октября 2019

Я хочу заменить значение в столбце, когда оно превышает мой пороговый диапазон, при этом среднее из 'n' предыдущих значений в столбце имеет постоянные значения. (Используя любую формулу в самих G-Sheets)

Вот мой G-Sheet динамически генерирует значения с использованием API.

enter image description here

enter image description here

enter image description here

Из приведенной выше ссылки на изображение в формате g-листа некоторые значения выделены черным цветом. ,Это значения, превышающие мой порог значения «55».

Я пробовал условное форматирование. Но я не мог заменить значения в этом случае. Все, что мне нужно, это решение внутри самих G-листов.

1 Ответ

0 голосов
/ 29 октября 2019

Вы можете использовать следующий код GAS:

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Fix values')
  .addItem('Run fixer', 'fixValues')
  .addToUi();
}

function fixValues() {
  var n = 5;
  var threshold = 55;
  var values = SpreadsheetApp.getActiveRange().getValues();
  for (var i=0; i<values.length; i++) {
    if (values[i][0] > threshold && i==0)
      values[i][0] = threshold;
    if (values[i][0] > threshold && i>0) {
      var startAvgIdx = (i-n >= 0) ? i-n : 0;
      var sum = 0;
      for (var j=startAvgIdx; j<i; ++j) sum += values[j][0];
      var avg = sum / (i-startAvgIdx);
      values[i][0] = avg;
    }
  }
  SpreadsheetApp.getActiveRange().setValues(values);
}

Это создаст меню в верхней части документа Sheets с кнопкой, которая запускает функцию. Функция будет работать в выбранном диапазоне. Вы можете увидеть пример результатов ниже:

Script execution example

Осталось рассмотреть только один вопрос: что делать, если начальное значение уже превышает пороговое значение? ? Должен ли он быть оставлен как есть, должен быть установлен порог ...? В моем коде я создал его, чтобы установить пороговое значение в случае возникновения такой ситуации, но вы можете сменить его (код после строки if (values[i][0] > threshold && i==0)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...