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