简述: 如何将两个范围合并为一个函数参数?例如,我想查看除 E5 之外的 E 列中的每个单元格:=MY_FUNCTION( somehowjoin( E1:E4, E6:E ) )
背景
我正在编写类似于 Microsoft Project 的 Google Sheets 项目跟踪器。在其中,我有一个Google Sheets 自定义函数,它允许我通过查看所有依赖任务的最大结束日期来计算各种任务的开始日期:
=MAX_LOOKUP( G9, A:A, I:I )
然而,这个任务的结束日期是基于开始日期计算的,而该结束日期位于检查所有结束日期的列中。因此,我面临循环依赖的问题。 因此,我希望为每行编写公式以跳过当前行,例如:
=MAX_LOOKUP( G9, A1:A8 + A10:A, I1:I8 + I10:I )
就我目前的解决办法而言,是将自定义函数的签名重写为以下形式:
=MAX_LOOKUP_SKIPROW( G9, ROW(), "A", "I" )
并在该函数内手动构建这两个范围,使用:
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var keys1 = sheet.getRange(keyCol+"1:"+keyCol+(skipRow-1)).getValues();
var vals1 = sheet.getRange(valCol+"1:"+valCol+(skipRow-1)).getValues();
var keys2 = sheet.getRange(keyCol+(skipRow+1)+":"+keyCol).getValues();
var vals2 = sheet.getRange(valCol+(skipRow+1)+":"+valCol).getValues();
这是一个实用的解决方案,但会使函数更具有特殊目的性。我认为这并不是连接范围这个更普遍问题的“答案”。
indirect()
和row()
的组合可以帮助您构建不包括当前行的范围。不是吗? - Marc