Google 表格:带有范围的 INDIRECT()

Zed*_*iii 3 spreadsheet filter match google-sheets google-apps-script

这个问题可以改写为“在 FILTER() 中使用以编程方式生成的范围”,具体取决于回答该问题所采取的方法。

提出这个问题是为了了解如何将变量范围传递到过滤函数中(如果可能的话)。

我目前正在使用以下功能进行过滤:

代码块1

=filter('Data Import'!1:10000,'Data Import'!D:D<12)
Run Code Online (Sandbox Code Playgroud)

导入数据后,ColumnD:D可以更改位置(例如,它可以在column 中F:F),但始终具有标题“student.grade”。

问题是:如何在过滤器函数中引用带有固定标题的可变位置列(如代码块 1 中给出的那样)?换句话说,我可以用有效的代码替换“数据导入”!D:D`,以便无论标题为“student.grade”的列的位置如何,该函数都可以工作吗?

我尝试过的:

我可以使用以下代码以字符串形式正确查找列的地址(无论数据导入后发生什么):

代码块2

=substitute(address(1,match("student.grade",'Data Import'!1:1,0),4),1,"")&":"&substitute(address(1,match("student.grade",'Data Import'!1:1,0),4),1,"")
Run Code Online (Sandbox Code Playgroud)

"D:D"当标题“student.grade”位于 cell 中D1以及"F:F"“student.grade”位于 cell 中时,上面代码块 2 中的函数返回F1。我以为我可以简单地将这个值插入到一个FILTER()函数中,然后就可以愉快地进行了,但是为了将我的字符串转换为可用的地址,我尝试对INDIRECT()上面代码块 2 中生成的字符串使用一个函数。

代码块3

=filter('Data Import'!1:3351,'Data Import'!indirect(substitute(address(1,match("student.grade",'Data Import'!1:1,0),4),1,"")&":"&substitute(address(1,match("student.grade",'Data Import'!1:1,0),4),1,""),TRUE)<12)
Run Code Online (Sandbox Code Playgroud)

该公式将无法正确解析。

简化同一函数的间接部分来测试它在给定范围时是否会产生相同的错误:

代码块4

=filter('Data Import'!1:3351,indirect('Data Import'!&"D:D")<12)
Run Code Online (Sandbox Code Playgroud)

这让我相信 INDIRECT() 不处理范围,或者如果处理范围,我不知道语法。这篇 Stack Overflow 帖子似乎表明这是可能的,但我无法弄清楚细节。

这个问题并不是试图让其他人帮助我解决我的编程困境。我可以使用各种脚本、大量的辅助 if 语句等等来做到这一点。

提出这个问题是为了了解如何将变量范围传递到过滤函数中(如果可能的话)。

pla*_*er0 6

再说一次,也许这就是你想要的:

=FILTER('Data Import'!1:100000, 
 INDIRECT("'Data Import'!"&
 ADDRESS(1,       MATCH("student.grade", 'Data Import'!1:1, 0), 4)&":"&
 ADDRESS(1000000, MATCH("student.grade", 'Data Import'!1:1, 0), 4)) < 12)
Run Code Online (Sandbox Code Playgroud)