【问题标题】:google sheets =indirect() on range of cellsgoogle sheet =indirect() 在单元格范围内
【发布时间】:2018-02-22 10:04:23
【问题描述】:

我想知道是否有一个标准函数来循环一系列单元格并对其应用间接函数。 我正在尝试构建一个表格来按商店、月份和类别支付我的费用,但到目前为止它很难扩展,因为我有一个看起来像

=INDIRECT(""&$B$3&"!"&concat(A12,$C$1))+INDIRECT(""&$B$4&"!"&concat(A12,$C$1))+INDIRECT(""&$B$5&"!"&concat(A12,$C$1))+INDIRECT(""&$B$6&"!"&concat(A12,$C$1))

其中 B3:B7 是我的商店,这样更容易阅读:

=forEach(B3:B7, INDIRECT(""& B3:B7 &"!"&concat(A12,$C$1)))

或类似的东西。

我尝试过使用 arrayFormula,但在这种情况下不起作用,因为我不是要在 2 个相同大小的范围上应用函数,而是在要查找的单个值范围内应用函数

简洁的问题: 是否有现成的功能,还是我必须尝试自己编写代码?

【问题讨论】:

    标签: google-apps-script google-sheets google-sheets-formula


    【解决方案1】:

    我为我的具体问题找到了一个非常适合用例的解决方案。 为了完整性而发帖,但仍然想知道其他人是否有更好的东西。

    function indirectLoop(range, cellReference) {
      var currentCell = SpreadsheetApp.getActiveSheet().getActiveCell();
      var numberOfStores = range.length;
    
      var total = 0;
    
      var debugString = "";
      var currentStore;
      var storeSheet;
      var storeCell;
      for (var i = 0; i < numberOfStores; i++) {
        currentStore = range[i];
        storeSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(currentStore);
        storeCell = storeSheet.getRange(cellReference);
    
        total = total + storeCell.getValue();
        //debugString += currentStore + ":" + storeCell.getValue() + "- ";
    
      }
      return(total);
    }
    

    【讨论】: