我正在使用这个公式
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列中的所有数字:
一切都很完美,直到1023号,在它之后,突然停止上市 就像它没有列出的值,即使它有:
我检查了表的格式,如果它包含任何不需要的符号,没有。公式可以有限制吗?
我的第二个表单有相同的问题,但它每页列出一个数字而不是四个。
答案 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))); "")
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 手动输入查找范围,否则它们实际上会做很少的工作。
Sample Data和替代公式解决方案
¹数组公式需要用 Ctrl + Shift + Enter↵完成。如果输入正确,Excel将公式包装在大括号中(例如 {和} )。您不要自己键入大括号。一旦正确进入第一个单元格,就可以像任何其他公式一样向下或向右填充或复制它们。尝试并减少对更接近表示实际数据范围的范围的全列引用。数组公式以对数方式计算计算周期,因此将参考范围缩小到最小值是一种好习惯。有关详细信息,请参阅Guidelines and examples of array formulas。
² {2010}引入了AGGREGATE function。它在早期版本中不可用。
答案 1 :(得分:0)
我发生了这种情况 - VLOOKUP大约有1000行,然后返回0表示所有内容,即使VLOOKUP指向的地点有非零数据。
我如何解决这个问题对我来说毫无意义。 VLOOKUPS从查找值中查找了34列。在绝望中,我重新安排了目标表,以便列索引号更小,无论出于何种原因,这都有效。
奇怪。