Вычислить среднее значение X верхних строк в столбце - PullRequest
1 голос
/ 03 августа 2020

У меня есть столбец с цифрами. Каждый месяц новое число вручную добавляется в верхнюю часть столбца с помощью «Вставить ячейки» -> «Сдвинуть вниз».

Я хочу вычислить среднее значение чисел в верхних 3 строках этого столбца . На самом деле это просто:

=SUM(G1:G3)/3

Однако это неприемлемое решение, потому что как только я добавляю новые числа в верхнюю часть столбца, номера строк в формуле автоматически обновляются, чтобы нацелить старые числа, что делает формулу практически бесполезной.

Можно ли сообщить формуле, чтобы она не обновлялась автоматически, или мне понадобится динамический c способ как-то выбрать верхние 3 строки? (Возможно, используя запрос?)

Ответы [ 2 ]

2 голосов
/ 03 августа 2020

Я только что нашел ответ в webapps: https://webapps.stackexchange.com/a/88995/33674

В основном, чтобы избежать автоматического обновления ссылок на ячейки, оберните их в INDIRECT().

Решение моей проблемы было:

=SUM(INDIRECT("G1:G3"))/3
1 голос
/ 03 августа 2020

Вы также можете создать пользовательскую функцию вместе с триггером onEdit для обновления значения при добавлении новой строки. Попробуйте следующее:

function onEdit(e){

  var row = e.range.getRow();
  var col = e.range.getColumn();
  if ( col==7 && row ==1 ){
    
    if (e.source.getActiveSheet().getRange(row,7).getValue() == "") {
    e.source.getActiveSheet().getRange(row,8).setValue("");}
    else{ e.source.getActiveSheet().getRange("H1").setValue(avg3Values());} 
    e.source.getActiveSheet().getRange("H2").clearContent();
}
}

function avg3Values() {
  
  var sheet = SpreadsheetApp.getActive().getActiveSheet();
  var elmt = sheet.getRange("G1:G3").getValues().flat([1]);

  var sum = 0;
for( var i = 0; i < elmt.length; i++ ){
    sum += parseInt( elmt[i], 10 );
}
  var avg = sum/elmt.length;
  return avg;
}

Используя эту функцию, ячейка H1 всегда будет вычислять среднее значение G1:G3 каждый раз, когда вы добавляете новую ячейку G1.

Вам нужно скопировать этот код в пустой скрипт. От Go до Tools => Script editor.

...