2016-12-14 62 views
0

我有一個範圍像下面的圖片中:獲取谷歌表範圍的最後X非空行

Google Sheets Range

其中頂部標題代表一年中的月份(1-12 ),左欄代表一個月中的日期(1至28/29/30/31)。

我想在我的範圍的最後30天執行一個SUM函數,以便它從最後一個非空值開始計數並上升,直到達到該列的第一個值,然後如果有還有數天的時間,到了前一個月,從最後一個數值開始計算。

例如,如果我想要的範圍的最後6個細胞的值的總和的圖像中,這將總結16,12,8,4,4和15

我已經嘗試將該解決方案適用於here中描述的類似問題,但目前爲止我還無法完成此工作。

回答

0

使用解決方案this question about iterating over a range using Google Script,我能夠設計出一個工作腳本。

腳本將從一個範圍的最後一個單元格向後迭代特定數量的單元格(它會在移動到前一列之前迭代列的所有行),跳過空單元格,並將遇到的值的總和返回到一個新的細胞。

function sumOfLast30() { 
    var range = SpreadsheetApp.getActiveSheet().getRange("A1:B2"); 
    var numRows = range.getNumRows(); // 2 
    var numCols = range.getNumColumns(); // 2 
    var counter = 0; 
    var counterMax = 2; // this determines how many cells get counted 
    var sumValues = 0; 

    for (var i = numCols; i > 0; i--) 
    { 
    if (counter == counterMax) { 
     break; 
    } 
    for (var j = numRows; j > 0; j--) { 
     var selectedValue = range.getCell(j,i).getValue(); 
     if (selectedValue != "") 
     { 
     sumValues = sumValues + selectedValue;   
     counter++; 
     if (counter == counterMax) 
     { 
      break; 
     } 
     } 

    } 
    } 
    var target = SpreadsheetApp.getActiveSheet().getRange("C3"); 
    target.setValue(sumValues); 
} 
相關問題