【问题标题】:Does Excel have any map or select functions?Excel 是否有任何地图或选择功能?
【发布时间】:2011-07-03 18:37:17
【问题描述】:

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

我使用的是 2010 版

【问题讨论】:

  • 如何平均字符串值?
  • 通过对字符串进行 vlookup 来获取数值
  • 可能有办法,但可能会很糟糕。为什么不使用 VSTO?
  • @David,对于这个特定的例子来说并不太痛苦。看我的回答。
  • @jtolle 也许我们有不同的痛阈! ;-) 投票赞成 BTW

标签: excel


【解决方案1】:

一般来说,不会。对于你的具体情况,有点。

假设你有一张这样的桌子

a 42
b 2
c 3

在 E8:F10 中。如果你用这样的数组调用 VLOOKUP:

=VLOOKUP({"a","c"},E8:F10,2,FALSE)

你会得到一个值数组:{42,3}。 (将公式作为数组函数输入...Ctrl+Shift+Enter。)所以在这种情况下你可以做的地图部分。

不幸的是,如果将 VLOOKUP 返回的数组全部放在一个公式中并将结果放在一个单元格中,则 AVERAGE 似乎不适用于该数组。更糟糕的是,它似乎可以工作,但只使用第一个元素,即使您将整个内容作为数组公式输入也是如此。也就是说,如果你把:

=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(绝对引用您的查找表)向下/跨平行行/列拖动,然后平均结果。

【讨论】:

  • 我无法哄骗 VLOOKUP 在 Excel 2016 for Mac 中返回一个数组。
  • @Rotsiser Mho,抱歉,我对此无能为力,因为我只有 Excel for Windows。需要注意的一件事是 Excel 数组文字具有不同的水平和垂直分隔符。所以我上面的例子适用于水平数组 - 例如在单元格 A1:B1 中输入。但如果您想在 A1:A2 中输入相同的公式,您可以使用分号分隔符,例如:=VLOOKUP({"a";"c"},E8:F10,2,FALSE)。当然,在 Mac 上使用任何组合键将公式作为数组公式输入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-20
  • 1970-01-01
  • 1970-01-01
  • 2020-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多