我在右侧的数组中有一排公司。使用 INDEX() + XMATCH(),我对照表格检查公司名称并提取相应的比率(十进制数)。这会创建一个包含所有比率值的溢出数组。如果我将 =AGGREGATE(12,6, "Array Cell Reference") 指向溢出数组,它会完美地取中位数。
但是,如果我将 INDEX/MATCH 公式复制并粘贴到 AGGREGATE 中,则会收到 #Value! 错误。
我通过调整电子表格让它与 MEDIAN(INDEX/MATCH) 一起工作,但它让我很好奇聚合的问题是什么。主要是因为我真的想使用 AGGREGATES 高级错误处理。
谢谢您的阐释,上帝保佑!
答案1
假设您有 1-7 的值,它们在 A1:A7 中是唯一的,并且在 B1:B7 中有一些某种值,并且使用 D1:D3 中的数据作为 B1:B7 中的查找值来执行INDEX/MATCH
公式。功能将产生三个结果,假设所有结果都成功,那么就会产生如下值集。MATCH
Spill
7,1,5
该公式本身并不完全是动态范围。它得出溢出结果,但那只是其中的一半。
假设公式在 E1 中。它会溢出以填充 E1:E3,或者可以这样称呼,E1#。到目前为止,一切都很好,似乎就是这样。引用 E1#,您可以获得 DR 的所有乐趣。但是使用其中的公式,您就不会获得。DR 是结果,而不是公式。
您可以引用结果,即 DR,它的行为正如您所期望的那样。但是将公式放在那里意味着您不再引用 DR,而只是引用导致 DR 的公式。遗憾的是,这还不足以让它发挥作用。
因此,INDEX/MATCH
then 就像一个单一结果公式,取其内部结果数组的“左上角单元格”,并传递该单个数据点。在上面的例子中,即 7。虽然AGGREGATE
如果输入是单元格引用,则很乐意接受单个输入,但它不会接受实际值。因此,它变成了=AGGREGATE(12,0, 7 )
7,并被 7 所阻碍。如果 7 是“A7”,并且 A7 只保留一个 7,它会很高兴,但它不会直接接受 7 本身。(无论如何,不会接受“12”。我没有尝试看看它的其他函数是否会这样做。)
解决该问题的一种方法是将INDEX/MATCH
公式放入命名范围并引用命名范围,然后该命名范围将取代“E1#”样式的引用。
LET
但是,使用并将其放置在命名变量中,然后在工作公式中使用该命名变量的看似相关的方法LET
不起作用。这是因为虽然LET
看似创建了具有单元格本身范围的命名范围,但实际上并非如此。(遗憾的是,MS 在创建时没有实现这一飞跃,LET
并且存在重要差异。)
但并非一切都失去了LET
……实际上,它在某种程度上与这种non-LET
情况完全类似。如果您在以下模式下使用“双变量”:
=LET(cow, INDEX(A1:B7,XMATCH(D1:D3,B1:B7,0),1), pig, cow, pig)
其中,您通过溢出公式定义“cow”,然后将另一个变量(在本例中为“pig”)定义为等于“cow”,那么您就完成了将公式放在单元格中并将其溢出的类似操作,然后引用该单元格而不是公式本身。您已使用这两个步骤最终得到一个真正的 DR 来引用,现在您可以并且仍然可以获得完整的结果。如果您将上述工作公式从裸露的“pig”更改为AGGREGATE
使用“pig”的函数,那么您就会成功。
因此,您实际上可以使用LET
,只需付出额外的努力/步骤,并且所有参照物都在单个单元格中,这使得两年后理解它变得更加容易,并且消除了某人可能删除或修改您的命名范围的可能性。
(叹气……)但你仍然不能。Excel 不允许在工作公式中或在AGGREGATE
周围放置LET
。这很可悲。
但是,虽然我现在没有时间去研究它,但当 Excel 生成一个内部数组(就像那样INDEX/MATCH
)时,它会保留它,尽管它似乎只传递了第一个元素。如果可以找到一个函数来包装它,该函数将处理数组,那么该内部数组可以“跳过”创建它并试图将其削减为单个元素的函数。然后将整个数组传递到公式的其余部分,您可以从中获得完整的结果。这个广泛的主题coercion
在 Excel 中被称为,也可用于实现其他看似被禁止的结果。因此,如果有人能找到一个函数来恢复该内部数组,可以这么说,同时不会做任何过于无用的事情,那么可以通过包装该强制函数的某些东西来对数组进行操作。但很难找到这样的东西,现在是凌晨 3:19,所以我把接力棒交给了。
与此同时,您可以放心地使用命名范围作为第二步。