簡體   English   中英

如何計算 ArrayFormula 中每行的最后 7 行的總和?

[英]How to I calculate the sum of the last 7 rows, for each row, inside an ArrayFormula?

我有一個帶有數值的 D 列,在相鄰的列上,我想顯示相對於當前行的最后 7 行的總和。

我已經嘗試了幾個變體,其中大部分都受到 StackOverflow 和其他網站的啟發,但它們並沒有按照我的需要工作。

我認為由於 Offset() 創建了一個范圍,因此只需“切片”我需要的范圍並將其提供給 sum()

ArrayFormula( Sum(Offset(D7:D500,-6,1,7,1)) )

但是,它似乎只計算我放置這個公式的單元格。

我根據我的情況改編了我在網上找到的潛在解決方案

ArrayFormula(SUMIF(ROW(D7:D500),"<="&ROW(D7:D500),D7:D500))

這個計算所有前一行的總和,所以我想使用 SUMIFS() 會得到我需要的東西,因此

=ArrayFormula(SUMIFS(D7:D500, ROW(D7:D500),"<="&ROW(D7:D500), ROW(D7:D500),">"&ROW(D7:D500)-7))

但這個是行不通的。 我也嘗試使用 Address() 和 Interpret() 創建范圍,但它們似乎在 ArrayFormula() 中無法正常工作

我對它相當陌生,所以可能只是我沒有正確使用它們。 我在這里做錯了什么? 有沒有更好的方法來做到這一點? 如果可能,我寧願使用 ArrayFormula(),因為公式將存在於單個單元格中。

方法一、 OFFSET函數

COUNT(D7:D500)-7告訴 EXCEL 從D7減少多少個單元格。

=SUM(OFFSET(D7:D500,COUNT(D7:D500)-7,,7,1))

沒有Ctrl + Shift + Enter

方法二、 Index函數

如果您擔心OFFSET函數的波動性,您可以嘗試

=SUM(INDEX(D7:D500,COUNT(D7:D500)-6):INDEX(D7:D500,COUNT(D7:D500)))

沒有Ctrl + Shift + Enter

嘗試:

=SUM(IFERROR(QUERY(D7:D500, "limit 7 offset "&COUNTA(D7:D500)-7)))

0

您可以通過在 Google Apps 腳本中創建的自定義函數來完成此操作。 為此,請執行以下步驟:

  • 在電子表格中,選擇工具 > 腳本編輯器以打開綁定到文件的腳本。
  • 在腳本編輯器中復制此函數,並保存項目:
function SUM7ROWS(input) {
  var output = [];
  var sum;
  for (var row = 0; row < input.length; row++) {
    sum = 0;
    for (var i = 6; i >= 0; i--) {
      if (row - i >= 0) {
        sum = sum + Number(input[row - i]);
      }
    }
    output.push(sum);
  }
  return output;
}
  • 現在,如果您返回到您的電子表格,您可以像使用任何其他函數一樣使用此函數。 您只需要提供適當的范圍作為參數(在本例中為D7:D500 ),如下所示:

在此處輸入圖片說明

我希望這有任何幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM