【问题标题】:Is there a function, that would return "" when input ref is empty, and its contents if it is not?是否有一个函数,当输入 ref 为空时返回“”,如果不是,则返回其内容?
【发布时间】:2014-11-08 18:38:44
【问题描述】:

IMO Excel 对空单元格的处理方式很奇怪。

我正在构建一个复杂的数组公式。引用的范围之一包含单元格,这些单元格可能为空,也可能不为空,如果不为空,它们可以同时包含数值和字符串。

我可以使用什么函数,如果单元格不为空,则获取单元格的值,如果单元格为空,则获取“”(或任何其他非数字,例如#N/A)?

我想让这样的东西工作:

=MIN(OFFSET(<column vector that contains text, numbers and empty cells>;<row vector of indices>-1;0))

这种形式的公式会返回一个#ARG 错误,正如Why this array formula doesn't work? 的答案中所解释的那样。

但是当我在OFFSET 前面加上N 时,它会将任何空单元格转换为0,因此最终结果是0(除非列向量中有负数)。

=MIN(L(OFFSET(<column vector>;<row vector of indices>-1;0)))

是否有任何公式,仅取消引用 OFFSET 返回的引用,保留空单元格的“空性”?或者也许有另一种解决问题的方法,比如

=MIN(IF(OFFSET(<column vector>;<row vector of indices>-1;0)="",L(OFFSET(<column vector>;<row vector of indices>-1;0)),""))

(此示例也因#ARG 而失败,因为据我所知,我还需要取消引用= 测试的数组引用)。

如果可能的话,我更愿意保留 Excel 2007 的内置函数集。而且没有VBA。

我会接受任何解决方案,即使用恒定数量的单元格,而不管每个输入数组的大小。


编辑:

顺便说一句,我想知道OFFSET 返回的数组有什么问题?这个简单的例子完美运行:

...OFFSET 返回的数组不知何故想在公式中独处。

【问题讨论】:

  • 只是为了理解,把它放在最简单的形式中,你想要,例如MIN(A1:A10) 例如,A1:A10 中的单元格可能是空的数字或有文本?
  • @JohnBus​​tos 恐怕没有。我需要一些适用于数组公式的东西。我不知道如何简化问题中的示例。

标签: excel excel-formula


【解决方案1】:

可能还有其他选择,但我目前看不到.....

您可以使用这样的 IF 过滤掉零

=MIN(IF(N(OFFSET(INDIRECT($A$2),$C4:$G4-1,0))&lt;&gt;0,N(OFFSET(INDIRECT($A$2),$C4:$G4-1,0))))

但这不会区分范围内的任何实际零与 N 函数遇到空白或文本时产生的零

编辑

这个版本应该可以工作

=MIN(IF(COUNTBLANK(OFFSET(INDIRECT($A$2),$C4:$G4-1,0,1))+LEN(T(OFFSET(INDIRECT($A$2),$C4:$G4-1,0,1))),"",N(OFFSET(INDIRECT($A$2),$C4:$G4-1,0,1))))

也许在这里并不完全相关,但问题是找到可以处理这种类型设置的 OFFSET 返回的“引用数组”的函数 - NT 工作如此处所示以及 COUNTBLANK。可以在 OFFSET 输出上使用的其他函数是 SUBTOTALCOUNTIF。请注意,COUNTBLANK(连同SUBTOTALCOUNTIF)可以在范围上工作,而TN 只能用于单个值 - 如果后面的函数应用于范围,它们只会查看第一个值在范围内 - 因为我能够在没有“height”参数的情况下使用OFFSET,但你需要使用COUNTBLANK(这是一个好习惯,所以OFFSET应该有最后的1,就像这里

=OFFSET(间接($A$2),$C4:$G4-1,0,1)

【讨论】:

  • 是的。我之前想过这个解决方案。不幸的是,零在我的生产输入数据向量中实际上很常见......
  • 我认为,您的领先优势很好,唯一的问题是如何区分数组中的零和空单元格。我再问一个问题。
  • Ups.. to late ;-) stackoverflow.com/questions/19842384/… 你认为我应该删除它吗?
  • 我认为以不同的方式提出问题可以引起更多关注。
  • 我已经找到了这个问题的部分答案:stackoverflow.com/questions/19842384/… 剩下的就是如何返回实际内容,而不是返回 1 或 0。普通方法不起作用。跨度>
【解决方案2】:

在 B1 中考虑:

=IF(ISBLANK(A1),"nothing there",A1)

所以如果 A1 包含公式:

=""

那么B1也会显示null。

【讨论】:

  • 你有点过于简单化了我的问题。我需要一些可以与数组公式一起使用的东西。但是将您的想法放入=MIN(IF(ISBLANK(OFFSET(&lt;column vector&gt;;&lt;row of indices&gt;-1;0)),"",OFFSET(&lt;column vector&gt;;&lt;row of indices&gt;-1;0)) 失败了。我需要一些东西来取消引用OFFSET 公式的结果。类似于N,但对空单元格和字符串有效。
  • 是的,我明白你的意思了。
【解决方案3】:

另一种可能性:

=MIN(CELL("contents",OFFSET(INDIRECT($A$2),N(INDEX($C4:$G4-1,)),0)))

注意N(INDEX(...)) 部分是用于强制执行数组评估的技巧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多