說我有一個18行的spresheet的範圍內,我可以硬編碼在列d最後7個值的範圍和平均它們的值,如下所示:獲取谷歌電子表格的最後一個X行
=AVERAGE(D12:D18)
那麼我怎麼能不用硬編碼來做同樣的事情,所以它會工作,因爲我添加更多的行?
說我有一個18行的spresheet的範圍內,我可以硬編碼在列d最後7個值的範圍和平均它們的值,如下所示:獲取谷歌電子表格的最後一個X行
=AVERAGE(D12:D18)
那麼我怎麼能不用硬編碼來做同樣的事情,所以它會工作,因爲我添加更多的行?
如果要計算平均值或總和,則不需要腳本。你也可以用一個數組過濾器來完成。下面的公式計算在A列中的平均過去7行:
=AVERAGE(FILTER(A:A;ARRAYFORMULA(ROW(A:A)>COUNT(A:A)-7+1)))
這假定該數據在第1行開始。否則你必須在該式中,後者不斷改變爲行號,其中數據開始。
原來你可以使用自己的代碼。凌亂,但它的工作原理:
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;
};
您也可以使用OFFSET()
,因爲Webapps.SO answer用於彙總一行的最後X個單元格。
對於相反的---聚合一列的最後一個X單元格--- OFFSET params只需要四處移動即可。這裏有一個命令應該適用於你的例子(這裏假設你的數據從D2開始併到達D18):
=iferror(average(offset($D$2, max(0, count($D$2:$D18)-7), 0, 7, 1)), 0)
它抱怨 - 參數必須是範圍! – Mutant 2014-07-10 19:03:06