公式在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$2
locking$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$2
locking行号。 在填写公式时,您只需要参考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))); "")
示例数据和解决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很多 。
示例数据和替代公式解决scheme
¹ 数组公式需要使用Ctrl + Shift + Enter 键来完成。 如果input正确,Excel将花括号包括在公式中(例如{和} )。 你不要自己input大括号。 一旦正确input第一个单元格,就可以像其他任何公式一样向下或向右填充或复制它们。 尝试和减less您的全列引用范围更接近代表实际数据的范围。 数组公式将计算周期对数化,所以最好将参考范围缩小到最小。 有关更多信息,请参阅数组公式的示例 。
²AGGREGATE函数是在Excel 2010中引入的,它在早期版本中不可用。