公式在X行后停止工作

我正在使用这个公式

IFERROR(INDEX('BEW'!$B$5:$B$2067;SMALL(IF('BEW'!$G$5:$G$2067=$B2;ROW('BEW'!$G$5:$G$2067)-ROW('BEW'!$G$5)+1);ROW($1:$1)));"") 

对于我的Excel格式,它使用$ B2 ,但是对于每个数字它改变($ J2,$ B21等) ,在这个例子中(第二个截图)是

 188 B20 ZE 122011 1023 

要么

 181 B20 ZE 122011 1024 

然后在第一个屏幕截图中find该表格,并在G列中search相应的编号,然后列出B列中的所有编号:
像这儿

一切都完美到1023号之后,它突然停止上市。
就像它没有价值列表,即使它有: 这里

我检查了格式的表,如果它包含任何不需要的符号,什么都没有。 公式有没有限制?

我的第二种forms有同样的问题,但它列出每页而不是四个数字。

TL; DR:丢失ROW($1:$1)行的ROW($1:$1)$绝对行锚点,这样行号就会随着它的填充而变化 。 用$作为B$2locking$B2的行号(不是列),以便在填充时不会改变

您正在返回一个包含匹配的Nr teczki的行数组。 SMALL函数试图通过用ROW函数递增其k参数来从这些行号检索第一,第二,第三等 。 例如,如果将=ROW(1:1)放在单元格中并填充,则会得到1,2,3等 。 这将告诉SMALL检索第一,第二,第三等匹配的行号。

但是,您已经用$ absolute行锚locking了ROW函数。 例如,如果您将=ROW($1:$1)放入单元格并填充,则会检索1,1,1 ,SMALL将检索第一个,第一个,第一个等。

B2包含你的查询值,而且相反的原因,你应该用B$2locking行号。 在填写公式时,您只需要参考B2和B2。 虽然这可能是$B$2 ,您可能希望离开专栏以方便将公式复制到右侧的另一列。

你的数组公式¹修改:

 =IFERROR(INDEX(BEW!$B$5:$B$2067; SMALL(IF(BEW!$G$5:$G$2067=$B$2; ROW(BEW!$G$5:$G$2067)-ROW(BEW!$G$5)+1); ROW(1:1))); "") 

bew_small_index
示例数据和解决scheme

附录 – 更高效,更通用

如上所述,arrays公式在对数范围增加的情况下以对数forms咀嚼计算。 将范围保持在绝对最小值对于最大化arrays公式效率至关重要。

 'the following can be used to represent G2057:G2066 INDEX(G:G, 2057):INDEX(G:G, 2066) 

您的数据根据​​G列中的数字teczki进行分组。尽pipe看起来有序,但不能保证。 如果可以在B2中提取第一次出现和最后一次查找值的行号,则可以使用上面的语法仅引用与公式相关的范围; 这将大大提高配方的效率。

第一行的数字很简单,只需要一个简单的MATCH函数就可以切断很多不相关的范围。 如果列G中的数据被sorting但后者不能保证,那么后者同样容易。 如果可以合理地假设,你将永远不会有超过100个条目为一个Nr teczk,那么我们可以只添加99到第一个结果。 这将仍然有一些不相关的数据行,但大大less于search整个列。

 'first row with '188 B20 ZE 122011 1023' =MATCH(B$2, BEW!G:G, 0) 'last possible row with '188 B20 ZE 122011 1023' =MATCH(B$2, BEW!G:G, 0)+99 'range for array formula INDEX(BEW!G:G, MATCH(B$2, BEW!G:G, 0)):INDEX(BEW!G:G, MATCH(B$2, BEW!G:G, 0)+99) 

如果可以合理地假设你永远不会有超过25个条目,把99改成24,一定要保留一些空间,以防奇怪的Nr teczki有非常多的条目。 你的数组公式1成为,

 =IFERROR(INDEX(BEW!$B:$B, SMALL(IF(INDEX(BEW!$G:$G, MATCH(B$2, BEW!$G:$G, 0)):INDEX(BEW!$G:$G, MATCH(B$2, BEW!$G:$G, 0)+99)=B$2, ROW(INDEX(BEW!$G:$G, MATCH(B$2, BEW!$G:$G, 0)):INDEX(BEW!$G:$G, MATCH(B$2, BEW!G:G, 0)+99))), ROW(1:1))), "") 'put a modern spin on it by substituting the SMALL function with the AGGREGATE² function 'this is a standard (non-array) formula =IFERROR(INDEX(BEW!$B:$B, AGGREGATE(15, 6, ROW(INDEX(BEW!$G:$G, MATCH(B$2, BEW!$G:$G, 0)):INDEX(BEW!$G:$G, MATCH(B$2, BEW!$G:$G, 0)+99))/(INDEX(BEW!$G:$G, MATCH(B$2, BEW!$G:$G, 0)):INDEX(BEW!$G:$G, MATCH(B$2, BEW!$G:$G, 0)+99)=B$2), ROW(1:1))), TEXT(,)) 

填写以捕捉所有可能的匹配。 这些公式中的每一个都可以复制到右侧进行其他查找。 这些dynamic范围公式可能看起来更加复杂,但是除非您愿意为每个Nr teczki手动input查找范围,否则他们实际上做的工作量会less很多

bew_small_index_lookup
示例数据和替代公式解决scheme


¹ 数组公式需要使用Ctrl + Shift + Enter 来完成。 如果input正确,Excel将花括号包括在公式中(例如{} )。 你不要自己input大括号。 一旦正确input第一个单元格,就可以像其他任何公式一样向下或向右填充或复制它们。 尝试和减less您的全列引用范围更接近代表实际数据的范围。 数组公式将计算周期对数化,所以最好将参考范围缩小到最小。 有关更多信息,请参阅数组公式的示例 。

²AGGREGATE函数是在Excel 2010中引入的,它在早期版本中不可用。