如何将ARRAYFORMULA与OFFSET一起使用到前一行而不会出现循环引用错误

问题描述 投票:2回答:1

示例表:https://docs.google.com/spreadsheets/d/14ma-y3esh1S_EkzHpFBvLb0GzDZZiDsSVXFktH3Rr_E/edit?usp=sharing

在ItemData表的B列中,我已经通过将公式复制到列中的每个单元格中获得了我想要的结果,但我想使用ArrayFormula来解决这个问题。

在C列中,我使用ArrayFormula获得了相同的结果。然而,对于添加,列C指的是列B中的单元格,而列B指的是列B中的单元格。 B列中的每个单元格都在上面一行的单元格中加1。

如果我选择C3公式文本并将其粘贴到单元格B3的单元格编辑字段中(在复制期间不要搞砸单元格引用 - 我知道我可以使它们成为静态引用,但这不是我的问题),单元格出错的价值

#REF!

错误检测到循环依赖。要通过迭代计算解决,请参阅文件>电子表格设置。

请注意,在两种情况下需要完成的添加都是相同的:将1添加到上一行的单元格的值,因此不涉及循环引用。 B2中提供了起始值,B3中向下的单元格应使用前一行中B单元格的数据。

另外,请注意我确实尝试了File-> Spreadsheet设置并启用了最多25个项目的循环引用计算,但这只填充了前两个单元格(B3和B4)。

我怎么解决这个问题?我更喜欢像ArrayFormula这样的公式,其中公式只存在于单个单元格中。但只要插入其间或在底部添加的任何新行将在B列中添加相同的公式,复制粘贴将是可接受的。

google-sheets offset array-formulas circular-reference
1个回答
1
投票

匹配项目是否会连续?这似乎是这样的,因为您在公式逻辑中将每个Item单元格与其上方的单元格进行比较。这破坏了电子表格规范化的[不成文?]规则;值的地址本身通常不应被视为数据。

如果您已经承诺,您是否考虑过明确将位置用作数据源?例:

=ARRAYFORMULA(IFS(
  NOT(LEN(A3:A40)),,
  ROW(A3:A40)-3-MATCH(A3:A40,A$3:A$40,0)<=VLOOKUP(VLOOKUP(A3:A40,Items!$A$2:$D,2,false),DataPerColor!$A$2:$B,2,false),ROW(A3:A40)-3-MATCH(A3:A40,A$3:A$40,0),
  true,
))

就像你的公式一样,英语的全部内容是:

for each row,  
if there's no Item, don't output any ItemData,  
if the number that belongs in this cell¹ is less than or equal to the lookup, print it,  
otherwise, don't output any ItemData

但那么什么是¹“这个单元格中的数字”,我们如何在不使用B列的情况下计算它?我滥用事物的位置来获得它。向下看你的行B,出现的每个数字只是:

this row's number,  minus  
the row where items start [always 3],  minus  
the row number [in just the Item rows] of the first row containing this row's Item

使用倒数第二个ItemC作为示例:第一个ItemC是第16个项目列表,我们正在查找的那个......“倒数第二个ItemC”位于工作表的第21行。 21-3-16 = 2 ...你想要的数字。

如果您能忍受这种情况,它就是一个单一的配方,并根据您的规格工作。

© www.soinside.com 2019 - 2024. All rights reserved.