Получить диапазон последних X строк в Google Sheets - PullRequest
3 голосов
/ 25 апреля 2011

Скажем, у меня есть электронная таблица с 18 строками, и я могу жестко запрограммировать диапазон последних 7 значений в столбце D и усреднить их значения следующим образом:

=AVERAGE(D12:D18)

Как тогда я могу сделать то же самое?без жесткого кодирования, так что это будет работать, когда я добавлю больше строк?

Ответы [ 3 ]

7 голосов
/ 16 октября 2012

Если вы хотите рассчитать среднее или сумму, вам не нужен скрипт. Вы можете сделать это с помощью фильтра массива. Следующая формула вычисляет среднее значение за последние 7 строк в столбце A:

=AVERAGE(FILTER(A:A;ARRAYFORMULA(ROW(A:A)>COUNT(A:A)-7+1)))

Предполагается, что данные начинаются со строки 1. В противном случае необходимо заменить последнюю константу в формуле на номер строки, с которой начинаются данные.

2 голосов
/ 29 декабря 2015

Вы также можете использовать OFFSET(), как этот Webapps.SO ответ делает для агрегирования по последним X ячейкам строки.

Для обратного --- агрегирование последнего Xячейки столбца --- параметры OFFSET просто нужно перемещать.Вот команда, которая должна работать для вашего примера (предполагается, что ваши данные начинаются с D2 и переходят к D18):

=iferror(average(offset($D$2, max(0, count($D$2:$D18)-7), 0, 7, 1)), 0)
2 голосов
/ 25 апреля 2011

Оказывается, вы можете использовать свой собственный код. Грязно, но работает:

function lastValues(column, num) {
  var lastRow = SpreadsheetApp.getActiveSheet().getMaxRows();
  var values = SpreadsheetApp.getActiveSheet().getRange(column + "1:" + column + lastRow).getValues();

  for (; values[lastRow - 1] == "" && lastRow > 0; lastRow--) {};

  arr = [];

  for(i=0; i < num+1; i++){
    arr.push(values[lastRow - i]);
  };

  return arr;
};
...