2011-02-24 70 views
3

我有字符串值,我想要做的每一个vlookup,然后计算结果的平均值,其中一排。如果这是C#,我会做一个Select(str => VLookup(str,dict)).Average(),有没有办法在一个单一的Excel函数中做到这一点?Excel有没有地图或选择功能?

我使用的是2010版

+0

你如何平均字符串值? – 2011-02-24 18:06:22

+0

通过对字符串进行查找以获取数值 – 2011-02-24 18:56:59

+0

可能有一种方法,但它可能会很糟糕。你为什么不使用VSTO? – 2011-02-24 19:46:08

回答

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({"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(绝对引用您的查找表),然后对结果进行平均。