Excel有任何地图或选择功能吗?

Sco*_*ein 4 excel

我有一行字符串值,我想vlookup在每个字符串上执行一次,然后计算结果的平均值.如果这是C#,我会做一个Select( str => VLookup(str,dict)).Average(),有没有办法在一个excel函数中执行此操作?

我正在使用2010版

jto*_*lle 5

一般来说,没有.对于你的具体情况,有点.

假设你有一张这样的桌子

a 42
b 2
c 3
Run Code Online (Sandbox Code Playgroud)

在E8:F10.如果用这样的数组调用VLOOKUP:

=VLOOKUP({"a","c"},E8:F10,2,FALSE)
Run Code Online (Sandbox Code Playgroud)

你会得到一系列价值观:{42,3}.(输入公式作为数组函数... Ctrl + Shift + Enter.)因此,在这种情况下您可以执行地图部分.

不幸的是,如果将所有数据放在一个公式中并将结果放在一个单元格中,AVERAGE似乎不适用于VLOOKUP返回的数组.更糟糕的是,它似乎可行,但只使用第一个元素,即使您将整个元素作为数组公式输入.也就是说,如果你把:

=AVERAGE(VLOOKUP({"a","c"},E8:F10,2,FALSE))
Run Code Online (Sandbox Code Playgroud)

在单元格H12中,即使您将其作为数组公式输入,您也将返回42而不是22.5.

奇怪的是,将相同的公式放在两个单元格中,例如H16:I16,并将其作为数组公式输入,可以返回一个包含两个元素的数组:{22.5,22.5}.(这可能只是一个单元素阵列扩展到两个单元格.)因此,您可以获得所需的内容,而无需拥有完整的大型中间结果数组.(使用数组代替工作表函数的非数组参数可能很奇怪.请参阅:是否有任何关于使用数组参数调用的内置Excel函数行为的文档?)

当然,更像Excel的方法是使用中间数组而不是尝试将其压缩成花式数组公式.您有一个要查找的字符串列表,然后向下/跨并行行/列拖动一个普通的VLOOKUP(带有对查询表的绝对引用),然后对结果求平均值.