簡體   English   中英

對 Google 表格工作簿中選定的工作表中的單元格求和

[英]Sum cells from a selection of sheets in a Google Sheets Workbook

我創建了一個工作簿來跟蹤店間物品轉移。 每個月的每一天都有頁面。 我想制作一個總計頁面以在單獨的工作表上計算總轉賬。 (工作簿中還有其他頁面我不想添加到總數中。)

我正在嘗試制作一個腳本,該腳本將獲取工作表 1 到 31 上單元格 A1 的值,並將工作表 32 上的總和放在單元格 A1 中,並且對於每個其他單元格也是如此。

現在我正在使用一個名為“自定義計數和總和”的谷歌表格插件,它讓我可以像我想要的那樣將所有頁面加在一起,但頁面名稱作為字符串傳遞,所以你不能在單元格之間復制和粘貼公式。 我通過使用 address(row(),column(),4,true) 來引用單元格位置找到了一個解決方法,這樣我就不必手動輸入每個單元格了。現在我正在嘗試使其值將更新而無需我重新輸入公式。 我不能使用我安裝的附加函數來做到這一點,因為據我所知,我需要傳遞另一個參數,但我不能在附加公式中做到這一點。 我正在嘗試編寫自己的腳本,並嘗試使用以下問題中的信息,但沒有成功。

來自工作簿中所有工作表的 Google Sheets Sum 值

任何幫助,將不勝感激

通常,最好在一個選項卡中收集每天、每月和所有年份的所有數據。 每個項目在它自己的行上都有一個日期,就像一個數據庫。

與將不同選項卡中的數據聚合到一個選項卡上相比,將一個選項卡上的所有數據分解到不同選項卡中進行求和/計數/分析要容易得多。

讓我們看看這個解決方法是否適合您。

在這種情況下,如果您想要一個函數來獲取所有單元格和求和,您應該嘗試匹配要從中獲取值的工作表。 在您的情況下,您可以查找所有數字值。

/**
 * Sum all the values in the cells/range of all the sheets that match the
 * regular expressión `(\d)+`
 *
 * @param {string} A1Notation - Range in A1Notation that would be sum for all the cells  
 */
function SUM_SHEETS(A1Notation){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();

  var regEx = /\b\d+\b/; // The regEx that will match the sheets

  var result = 0;
  for(var i=0; i < sheets.length; i++){
    var sheet = sheets[i];

    // Check that your sheet is matching your regular Expression
    if( regEx.test(sheet.getName())){

      var range = sheet.getRange(A1Notation);
      var values = range.getValues();

      // Iterate through all the range from all the current sheet
      for(var j=0; j < values.length; j++){
        for(var k=0; k < values[j].length; k++){
          var value = values[j][k];

          // Only sum when the cell is a number
          if (typeof value == "number"){
            result += value;
          }
        }
      }
    }
  }

  return result;
}

考慮到輸入參數是一個表示您的范圍的字符串,因此您可以遍歷工作表。

第一個值 第二值 值的總和

還要注意工作表,在這個解決方法中,我使用了一個 regExp,它將對所有數字(僅數字)的值求和。

當使用=SUM_SHEETS(A1Annotation) ,我所做的工作(對於我需要的 13 行)是在 A 列中輸入L1,L2,...,L13來引用我想要的工作表中的單元格用這個函數求和 在公式列 (B) 中,我用單元格A1替換了SUM_SHEETS()L1部分(因為我剛剛在單元格A13輸入了L1 )。

示例: | A列| B欄| |----------------------|-----------------------| | L1 | =SUM_SHEETS(A13) | | L2 | =SUM_SHEETS(A14) |
| ... | |
| L13 | =SUM_SHEETS(A25) |

而不是: | A列| |--------------------| | =SUM_SHEETS("L1") |
| =SUM_SHEETS("L2") | | ... | | =SUM_SHEETS("L13") |

最后,為了在我想要的時候刷新,我創建了一個按鈕和一個宏,從字面上刪除單元格A13:A25的數據,然后將它們重新放入。

 function Refresh_Summary() { var spreadsheet = SpreadsheetApp.getActive(); spreadsheet.getRange('A13:A25').activate(); spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true}); spreadsheet.getRange('A13').activate(); spreadsheet.getCurrentCell().setValue('L1'); spreadsheet.getRange('A14').activate(); spreadsheet.getCurrentCell().setValue('L2'); spreadsheet.getRange('A15').activate(); spreadsheet.getCurrentCell().setValue('L3'); spreadsheet.getRange('A16').activate(); spreadsheet.getCurrentCell().setValue('L4'); spreadsheet.getRange('A17').activate(); spreadsheet.getCurrentCell().setValue('L5'); spreadsheet.getRange('A18').activate(); spreadsheet.getCurrentCell().setValue('L6'); spreadsheet.getRange('A19').activate(); spreadsheet.getCurrentCell().setValue('L7'); spreadsheet.getRange('A20').activate(); spreadsheet.getCurrentCell().setValue('L8'); spreadsheet.getRange('A21').activate(); spreadsheet.getCurrentCell().setValue('L9'); spreadsheet.getRange('A22').activate(); spreadsheet.getCurrentCell().setValue('L10'); spreadsheet.getRange('A23').activate(); spreadsheet.getCurrentCell().setValue('L11'); spreadsheet.getRange('A24').activate(); spreadsheet.getCurrentCell().setValue('L12'); spreadsheet.getRange('A25').activate(); spreadsheet.getCurrentCell().setValue('L13'); };

表格列的圖像

(當SUM(First:Last!L1)會更快但它可以工作時,這是一種解決方法)

暫無
暫無

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

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