[英]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.