【问题标题】:Mismatched range sizes in FILTER()FILTER() 中的范围大小不匹配
【发布时间】:2017-06-14 16:43:57
【问题描述】:

我有一个包含总计(总计列包含单词“Total”)的信息数据透视表,我想进一步处理。我创建了一个新工作表并使用

=ARRAYFORMULA('Pivot Table mins'!A:B)

抓取前两列。

但后来我想“导入”只是其中包含单词“Total”的列,所以我创建了:

=FILTER('Sheet'!A:X,MMULT(REGEXMATCH('Sheet'!A:X,"Total"),ROW(INDIRECT("a1:a"&COLUMNS('Sheet'!A:X)))^0))

例如如果数据透视表数据跨越 A 到 Z 列,但只有 D 和 F 列有关键字“Total”,我只想“导入”这些列。

但是我收到一条错误消息:

FILTER 的范围大小不匹配。预期行数:1250。列数:1。实际行数:1,列数:1。

我读到可能是范围不匹配,但是我的所有范围都匹配。

旁注:两张表都有 1242 行。

【问题讨论】:

    标签: filter google-sheets google-sheets-query


    【解决方案1】:
    function onOpen() {
     SpreadsheetApp.getActiveSpreadsheet().addMenu(
        'Copy Data', [ 
          { name: 'Copy', functionName: 'copyTotalColumns' },
          ]);  
    }
    
    function copyTotalColumns() {
      var ss = SpreadsheetApp.getActiveSpreadsheet()
      var s=ss.getSheetByName("Sheet")
      var s1=ss.getSheetByName("Sheet2")
      var lastColumn = s.getLastColumn();
      var lastRow= s.getLastRow()
      var startCol=3 //column to start total rows
      var data = s.getRange(1,1,1,lastColumn).getValues();//get headers
      for(var i=0;i<data[0].length;i++){
        if( data[0][i]=="Total"){
          var copyFrom=s.getRange(2, i+1, lastRow,1).getValues()//get total column
          var copyTo=s1.getRange(2, startCol,       
    lastRow,1).setValues(copyFrom)//set total column on new sheet
          startCol=startCol+1 //index column
     }
      }}
    

    【讨论】:

    • 包含“Total”字样的列不断变化,因此无法指定某些列。
    • @Brittany Greve 查看修改后的答案。
    • 我会在 Google 表格中的哪个位置实现此功能?我正在寻找最有效的方法,因为此工作表将与多个用户一起使用。谢谢。
    • 我在代码中添加了一个创建菜单来创建一个自定义菜单来运行它。从主菜单中,转到工具 - 脚本编辑器。删除那里的内容并复制上面的代码。保存并运行它。回答提示。让您有一张 Sheet2 来接受新数据。从菜单运行脚本。要与他人共享,他们将需要编辑权限。去谷歌上查询。如果您想分享您的电子表格,我可以提供更多帮助。
    猜你喜欢
    • 2019-09-29
    • 1970-01-01
    • 2021-07-17
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 2016-07-03
    相关资源
    最近更新 更多