小编Mod*_*lHX的帖子

如何将OFFSET()公式与一系列值一起使用?

编辑:关于XY问题的免责声明:我正在尝试解决的实际,具体问题是:如何在Google Spreadsheets/Excel中使用无限范围的"递归"(这是正确的术语吗?)公式?我正在使用的解决方案涉及OFFSET()公式.我问这个问题是因为我希望能够对公式使用和实现范围的方式有一个可扩展的理解,特别是无限范围.


我正在使用Google Spreadsheets并尝试创建ArrayFormulas,它将自动扩展而无需使用填充句柄,因为必要的列中添加了新数据.

要做到这一点,我想在我进行计算时使用无限范围,例如A2:A,这样无论添加多少数据,我都不需要拖动填充任何数据或公式,我可以让电子表格迭代并做好工作.

但是,当我尝试使用OFFSET()公式使用这些无限范围时,我遇到了一个问题.我要做的是让范围内的每个单元格从它旁边的几个单元格中拉出值(因此是偏移量),使用这些值进行简单计算,并将其作为新单元格值.但是因为公式将指令解释为试图偏移整个(无限)值范围,所以它返回一个#REF!错误.这是一个共享的示例表,演示了我正在尝试做的事情.

https://docs.google.com/spreadsheets/d/1V3ldSBoCrzyVWcn66wFBkDOmxt6iuYgtiU_H4KQ6J14/

如果由于某种原因你看不到公式,我使用的公式是:

C3 = ArrayFormula(偏移量(C3:C,0,-1) - 偏移量(C3:C,-1,-1))

F4 = Arrayformula(偏移(F3:F,0,-1)+偏移(F3:F,-1,0))

这两个都返回#REF!错误.C3的替代文字显示:"错误:结果未自动展开,请插入更多行(1)." F3的alt-text显示:"错误:检测到循环依赖."

我很自信为什么这些不起作用 - 你显然不允许这样使用和引用范围.但是,我不知道如何解决这个问题.

电子表格中的两个用例基本上是相同的,向后.如果我能找到一个我可以反向设计它为另一个工作的机会,但到目前为止我没有运气.

我已经google了很多,虽然我从来没有找到任何解决这个问题的东西,但是使用INDIRECT()函数似乎可以解决很多类似的问题.我无法理解这将如何适用于此,但该函数似乎严格用于从具有可变输入的单元格动态解析值.

(我应该提一下,这个数据是在后端表上,并且它被拉到另一张表上以显示前端的一些图表.如果这些数据是唯一涉及的话,我不会在这里问一个问题.)

任何帮助或朝着正确方向迈出的一步都将受到赞赏.

google-sheets array-formulas

5
推荐指数
1
解决办法
4771
查看次数

如果唯一的 SELECTed 列已经在 GROUP BY 中,为什么我还必须选择一个聚合列才能使用 GROUP BY?

在下面公式使用的数据中,C列包含一个产品标题列表(这些不是唯一的,很多都是空白的);Q 列包含每个产品的类别,F 列包含该产品的销售额。如果可能,我想避免发布任何实际数据(因为它属于我的雇主),但如果认为有必要,我可以模拟一些相同格式的虚假行。

我想要做的是生成某个类别中总销售额最高的非空白产品标题列表,按降序排序,限制为 25 个条目。

以下公式在我看来是完全合法的:

=QUERY('Raw Data'!A:Q, "Select C where Q = 'foo' and C != '' group by C order by sum(F) desc limit 25", 1)
Run Code Online (Sandbox Code Playgroud)

但事实并非如此。我收到错误“CANNOT_GROUP_WITHOUT_AGG”。我发现要完成这项工作,我还需要选择 sum(F) ,如下所示:

=QUERY('Raw Data'!A:Q, "Select C, sum(F) where Q = 'foo' and C != '' group by C order by sum(F) desc limit 25", 1)
Run Code Online (Sandbox Code Playgroud)

首先,这是为什么?文档(在此处找到)指出“如果您使用 group by 子句,则 select 子句中列出的每一列都必须在 group by 子句中列出,或者由聚合函数包装。” 我不明白第一个公式如何不遵守这个标准;select 中的每一列(即只有 C)都列在 group by 子句中。

其次,我怎样才能最好地修改这个公式(如果我可以的话)才能只选择 C?如果我没有做错任何事情(可疑,但可能),是否有解决方法,或者我是否必须处理它?

这个问题,以及其他类似的问题,不回答我的问题 - 我知道如果我想选择多个列,就像我在上面给出的第二个公式中所做的那样,我需要提供一个聚合函数,以便清楚它们是如何要分组。但是,在这种情况下,只有一列 …

google-sheets google-query-language

5
推荐指数
1
解决办法
2165
查看次数