X后,公式停止工作

时间:2016-03-31 21:27:41

标签: excel excel-formula aggregate

我正在使用这个公式

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

然后在第一个屏幕截图中转到此工作表并在G列中搜索相应的数字,然后列出B列中的所有数字:
like here

一切都很完美,直到1023号,在它之后,突然停止上市 就像它没有列出的值,即使它有: here

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

我的第二个表单有相同的问题,但它每页列出一个数字而不是四个。

2 个答案:

答案 0 :(得分:0)

  

TL; DR:ROW($1:$1)中丢失 $ 绝对行锚,例如ROW(1:1),以便行号更改因为它被填满了。将$B2中的行号(不是列)与 $ 锁定为B$2,以便在填充时不会更改。< / p>

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

但是,您已使用 $ 绝对行锚点锁定了ROW函数。例如如果您将=ROW($1:$1)放入单元格并填写,它将检索 1,1,1等并且SMALL首先检索,第一个,第一个等等。

B2包含您的查找值,出于完全相反的原因,您应该使用B$2锁定行号。当您填写公式时,您想要参考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
Sample Data和解决方案

附录 - 更有效,更普遍

如上所述,随着范围的增加,数组公式以对数方式计算。将范围保持在绝对最小值对于最大化阵列公式效率至关重要。

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

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

使用简单的MATCH function,第一行编号很简单,仅此一项就会切断大量不相关的范围。如果G列中的数据已经排序但是不能保证,后者同样会很容易。如果可以合理地假设您的单个 Nr teczk 永远不会有超过100个条目,那么我们可以在第一个结果中添加99。这仍然会有一些不相关的数据行,但远远少于搜索整个列。

'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 具有非常大的数量条目。您的数组公式¹变为,

=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(,))

填写下来以捕捉所有可能的比赛。可以将这些公式中的每一个复制到右侧以进行其他查找。这些动态范围公式可能看起来更复杂,但除非您愿意为每个 Nr teczki 手动输入查找范围,否则它们实际上会做很少的工作。

bew_small_index_lookup
Sample Data和替代公式解决方案

¹数组公式需要用 Ctrl + Shift + Enter↵完成。如果输入正确,Excel将公式包装在大括号中(例如 {} )。您不要自己键入大括号。一旦正确进入第一个单元格,就可以像任何其他公式一样向下或向右填充或复制它们。尝试并减少对更接近表示实际数据范围的范围的全列引用。数组公式以对数方式计算计算周期,因此将参考范围缩小到最小值是一种好习惯。有关详细信息,请参阅Guidelines and examples of array formulas

² {2010}引入了AGGREGATE function。它在早期版本中不可用。

答案 1 :(得分:0)

我发生了这种情况 - VLOOKUP大约有1000行,然后返回0表示所有内容,即使VLOOKUP指向的地点有非零数据。

我如何解决这个问题对我来说毫无意义。 VLOOKUPS从查找值中查找了34列。在绝望中,我重新安排了目标表,以便列索引号更小,无论出于何种原因,这都有效。

奇怪。