我有一行字符串值,我想对每个值vlookup
进行计算,然后计算结果的平均值。如果这是C#,我会做Select( str => VLookup(str,dict)).Average()
,有没有办法在一个excel函数中执行此操作?
我正在使用2010版
答案 0 :(得分:5)
一般来说,没有。对于你的具体情况,有点。
假设你有一个这样的表
a 42
b 2
c 3
在E8中的:F10。如果用这样的数组调用VLOOKUP:
=VLOOKUP({"a","c"},E8:F10,2,FALSE)
你会得到一系列价值观:{42,3}。 (输入公式作为数组函数... Ctrl + Shift + Enter。)所以在这种情况下你可以做地图部分。
不幸的是,如果你将VLOOKUP全部放在一个公式中并将结果放在一个单元格中,AVERAGE似乎不适用于VLOOKUP返回的数组。更糟糕的是,它似乎可行,但只使用第一个元素,即使您将整个元素作为数组公式输入。也就是说,如果你把:
=AVERAGE(VLOOKUP({"a","c"},E8:F10,2,FALSE))
单元格H12中的,即使您将其作为数组公式输入,也会得到42而不是22.5。
奇怪的是,将相同的公式放在两个单元格中,例如H16:I16,并将其作为数组公式输入,可以返回一个包含两个元素的数组:{22.5,22.5}。 (这可能只是一个单元素阵列扩展到两个单元格。)因此,您可以获得所需的内容,而无需拥有完整的大型中间结果数组。 (使用数组代替工作表函数的非数组参数可能很奇怪。请参阅:Is there any documentation of the behavior of built-in Excel functions called with array arguments?)
当然,更像Excel的方法是使用中间数组而不是尝试将其压缩成花式数组公式。你有一个你想要查找的字符串列表,然后向下/跨平行的行/列拖动一个普通的VLOOKUP(带有对查询表的绝对引用),然后对结果进行平均。