当前位置: 首页 > 知识库问答 >
问题:

对Google工作表工作簿中所选工作表的单元格求和

燕宏胜
2023-03-14

我创建了一个用于跟踪门店间商品转移的工作簿。每个月的每一天都有页面。我想做一个总计页面,在一张单独的表格上统计所有的转账。(工作簿中还有其他我不想添加到总数中的页面。)

我正在尝试制作一个脚本,它将获取第1页到第31页上单元格A1的值,并将总和放在第32页的单元格A1中,同样地,对于每个其他单元格。

现在我正在使用一个名为“Custom Count and Sum”的google sheets附加组件,它可以让我像我想要的那样将所有页面加在一起,但是页面名称是作为字符串传递的,所以你不能在单元格之间复制和粘贴公式。我找到了一个解决方法,使用address(row(),column(),4,true)引用单元格位置,这样我就不必手动键入其中的每个单元格。现在,我正试图使其在不必重新输入公式的情况下更新值。我不能使用我安装的附加函数来实现这一点,因为据我所知,我需要传递另一个参数,但我不能在附加公式中实现这一点。我正在尝试写我自己的脚本,我已经尝试使用下面问题中的信息,但我没有任何成功。

Google Sheets和工作簿中所有工作表的值

任何帮助都将不胜感激

共有3个答案

商同化
2023-03-14

当使用=SUM_SHEETS(A1Annotation)时,我所做的工作(对于我需要的13行)是输入L1,L2,。。。,L13在A列中,该列将引用我的工作表中的单元格,我想用公式列(B)中的此函数求和。我用单元格A1替换了sum\u sheets()中的L1部分(因为我刚刚在单元格A13中键入了L1

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

而不是:| A列| |--------------------| | |=汇总表(“L1”)|
|=汇总表(“L2”)| |……|=汇总表(“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');
};
章烨烨
2023-03-14

一般来说,最好在一个选项卡中收集每天、每个月和所有年份的所有数据。每一项在它自己的行上都有一个日期,就像一个数据库。

将一个选项卡上的数据分解到不同的选项卡中进行求和/计数/分析要比将不同选项卡中的数据聚合到一个选项卡上容易得多。

齐飞星
2023-03-14

让我们看看这个变通方法是否适合您。

在这种情况下,如果希望函数获取所有单元格和总和,则应尝试匹配要从中获取值的表。在您的例子中,您可以查找作为数字的所有值。

/**
 * 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,它将求和所有的值,这是一个数字(只有数字)。

 类似资料:
  • 我使用这段代码将工作簿中的每一张工作表复制到一个新的工作簿中,它工作得很好,但它颠倒了工作表的顺序,是否有任何办法阻止它这样做? 我正在复制所有的工作表,这样我就可以将它保存为不同的文件扩展名,这是我发现唯一有效的方法。

  • 我有一段巧妙的代码,它根据指定单元格中的特定文本输入隐藏/隐藏表。在Book1中的Sheet1中(比方说),如果我改变单元格A1中的文本(比方说文本是苹果、橘子等),我会在同一本书中的sheet2上得到某些表格(让我们称之为答题卡)。 现在,在另一本书中,我有一个表,其中包含所有可能的文本值(Apple,oranges,等等)。我想写一个代码,首先通过这个表,使值在book1.sheet1(“sh

  • 我得到了这个错误: 工作簿已包含此名称的工作表 行应该检查工作簿是否已经包含此名称的工作表,但它不工作。我仍然有错误。 谢谢你的帮助!

  • 我最近问了另一个问题,这帮助我在“组合框”用户表单中达到了一定的程度,但现在需要更多的帮助才能让我完成这一任务。 我创建了一个用户表单,它有2个组合框,1个显示所有打开的Excel工作簿,1个显示所选工作簿的工作表。 我尝试创建一个按钮,该按钮使用在工作表框下选择的值从指定的工作表中复制数据。 我遇到的问题是将工作表组合框(Cb_Ws)值与VBA命令相关联,该命令将“单击”按钮,选择该工作表,然后

  • 我的脚本非常有效,但仅适用于活动工作表。如何更改它,使其搜索整个工作簿,并检查每个工作表中相同的单元格位置(例如:“AC2”)的值为1或2,并选择是否隐藏或显示该工作表,然后检查其他工作表并执行相同的操作? 我已经试了好几天试图找到一个例子,但我找到的唯一例子是一个独特的电子表格中的一个单元格,该单元格控制所有其他单元格的操作,我没有太多使用谷歌脚本的经验,无法让它同时检查每个电子表格。到完成时,

  • 我目前有一个工作簿,可以在excel中打开多个txt文件,过滤所有数据,只从中导入我需要的内容。每次导入都会进入不同的excel表“1”、“2”、“3”……到“31”(天)。 所有工作表具有相同的列数,但行数不同。我需要做的是将所有工作表合并到同一工作簿中的“ALL”工作表中。 帮助?!

  • 我想在Sheet1之后将所有工作表从特定工作簿复制到当前工作簿 此代码正在复制所有工作表,包括隐藏的工作表。如何只复制可见的工作表?