【问题标题】:Excel: What should iferror return in order to avoid #value! errorExcel:iferror 应该返回什么以避免#value!错误
【发布时间】:2014-07-19 09:59:54
【问题描述】:

这可能很简单,但似乎我无法找到解决方案。无论如何,谷歌搜索没有运气(可能是错误的关键字):

我需要计算所有找到的 vlookup 结果的平均值并忽略所有未找到的值。

我目前拥有的:

 = AVERAGE(
    IFERROR(VLOOKUP(A4,table01,2,0),""),
    IFERROR(VLOOKUP(A4,table02,2,0),""),
    IFERROR(VLOOKUP(A4,table03,2,0),""),
    IFERROR(VLOOKUP(A4,table04,2,0),""),
    IFERROR(VLOOKUP(A4,table05,2,0),""),
    IFERROR(VLOOKUP(A4,table06,2,0),""),
    IFERROR(VLOOKUP(A4,table07,2,0),""),
    IFERROR(VLOOKUP(A4,table08,2,0),""),
    IFERROR(VLOOKUP(A4,table09,2,0),""),
    IFERROR(VLOOKUP(A4,table10,2,0),""),
    IFERROR(VLOOKUP(A4,table11,2,0),""),
    IFERROR(VLOOKUP(A4,table12,2,0),"")
)

每一行都可以正常工作,但如果在多个表之一中找不到该值,则平均值将始终导致 #Value! 错误。如果没有找到 IFERROR 返回我“”。

为了使平均值起作用,我应该在 IFERROR 字段中输入什么而不是 ""

  • 将其替换为 0 会计算值并降低平均值,这不应该

谢谢你

【问题讨论】:

  • 如果你有 Excel 2010 或更高版本,你可以使用类似AVERAGEA(ISERROR(VLOOKUP(...),"text"),...)
  • @GeoB,是的,我有 excel 2010,但这并不能解决问题,仍然是完全相同的错误 #Value!。还有其他想法吗?
  • @Czakalli 不要将 iferror(vlookup...) 公式作为 AVERAGE 函数的参数,而是将它们分别放在一个单独的单元格中,然后对单元格范围进行平均。
  • 因此,当VLOOKUP() 返回#VALUE 时,使用ISERROR(VLOOKUP(...),"text") 会返回除text 之外的其他值,应该将其排除在使用AVERAGEA() 的平均值之外?

标签: excel


【解决方案1】:

我对罗恩的建议很感兴趣。
正如您在他的回答中所评论的那样,您需要制作 120 个帮助列才能做到这一点。
在我看来,您只需要一个 12 x 10 的辅助单元矩阵。
而且您只需要一个公式。

考虑一下这个简单的示例数据:

您正在如图所示的所有 3 个表中查找 Data1 的平均值(Value1 和 Value2)。
所以这就像查看 3 个表,每个表有 2 列。
根据 Ron 的建议,它将需要 6 个辅助列和 6 个不同的公式。

这是我的建议。
让我们创建一个辅助矩阵,如下所示:

我们使用下面的公式来创建矩阵:

=IFERROR(VLOOKUP(A2,INDIRECT({"Table1","Table2","Table3"}),{2;3},0),"")

这是一个数组公式

首先选择D7:F8(您的矩阵),然后单击公式栏并输入公式。
使用 Ctrl+Shift+Enter 将其输入为 Array Formula

检查矩阵,它返回我们需要的所有值:

对于未找到的值,它会返回 ""
辅助矩阵完成后,您可以简单地输入:

=AVERAGE(D7:F8)
=AVERAGE(matrix)(如果您想为您的矩阵创建一个命名范围

B2 中基于我们的示例数据布局。结果将是 3。
HTH。哪个更容易设置完全取决于您。

【讨论】:

  • 这很有意义并简化了使用表格的工作,我可以通过拖动箭头轻松复制它。肯定学到了。今天介绍如何在阵列上使用 2D VLOOKUP。不过,我将不得不接受 Chris 的回答,因为有 200 人的帮助表会很大,并且可能会混淆整个代码以及将来的任何进一步更改。如果有人想测试 L42 解决方案,请在此处上传文件link
  • 毕竟实现了这一点,因为最终必须将平均值更改为中值以获得更好的结果。谢谢!
  • @Czakalli 正如我所说,设置更方便取决于您。但我很高兴它有所帮助。我仍然要感谢 Ron 的建议:)
【解决方案2】:

我无法提供让Average 或其表亲忽略此类列表中的错误的方法(如果它是一系列值,包括错误,那么可以做到...)

作为替代方案,使用 `Sum(...) / Count(...) 方法(仅显示前两个表格)

=SUM(
 IFERROR(VLOOKUP(A4,Table1,2,0),),
 IFERROR(VLOOKUP(A4,Table2,2,0),)
) / SUM(
 ISNUMBER(VLOOKUP(A4,Table1,2,0)),
 ISNUMBER(VLOOKUP(A4,Table2,2,0))
)

【讨论】:

  • 感谢它的工作!一如既往地希望找到最佳解决方案并使用所有 excel 可能性并学习一些新公式。但它确实有效,这才是最重要的!
  • 经典始终有效。 :) 但这将是 1 个大型公式,考虑到其中一个 cmets 中提到的 OP,大约 12 个表和 10 个不同的感兴趣列。虽然仍然值得 + :D
【解决方案3】:

不要将所有这些 IFERROR(VLOOKUP... 函数用作 AVERAGE 函数中的参数,而是将每个函数放入单独的单元格中,然后在 AVERAGE 函数中引用范围。

例如:

=AVERAGE(F1:F10)

在哪里

F1:  IFERROR(VLOOKUP(A4,table01,2,0),"")
F2:  IFERROR(VLOOKUP(A4,table02,2,0),"")

等等。

来自 AVERAGE 函数的 HELP:

如果范围或单元格引用参数包含文本、逻辑值、 或空单元格,这些值将被忽略;然而,细胞与 包括零值。

参数是错误值或文本 不能转换成数字会导致错误。

【讨论】:

  • 我想到了这一点,但我有 12 个表可以从中获取 VLOOKUP,每个表有 10 个不同的列,这意味着我要创建额外的 120 个隐藏列。我很确定拖放小加号不会在那里工作:(。无论如何谢谢!
  • 我有点同意你的建议并写了我的版本:)
  • @L42 我喜欢你的版本
猜你喜欢
  • 1970-01-01
  • 2014-10-28
  • 2010-11-20
  • 2010-12-30
  • 2020-12-18
  • 1970-01-01
  • 2011-06-10
  • 1970-01-01
  • 2011-07-10
相关资源
最近更新 更多