首页 > 解决方案 > Excel 返回错误响应

问题描述

=IF(B12<>"",(IF(U12="订阅","订阅",IF(U12="TEH","订阅",IF(U12="ESA","订阅",IF(U12= "永续","买入",IF(U12=" "," ")))))))

当 U12 中的值不是选项之一并且我想获得空白时,我在单元格中得到一个“假”值,其中包含这个公式,感谢任何帮助谢谢

标签: excelif-statementconditional-statements

解决方案


把这个:改成IF(U12=" ", " ")这个:IF(U12=" ", " ", "")。这是 Google 表格中的演示,但公式相同。 https://docs.google.com/spreadsheets/d/10iFqq0PNt9VhGKMPLCxsI1df0x4nDSxCaCGSdEEktO8/edit#gid=0

但是,我认为这并不完全正确。一方面,它看起来像这个子句:

IF(U12=" ", " ")

只是在那里尝试生成您正在寻找的空白。如果是这种情况,则将其更改为:

IF(U12=" ", " ", "")

但是,我想我可能会使用一些数组常量,如下所示:

=IF(B12<>"", CHOOSE(SUM(--(U12={"Subscription","T.E.H","ESA"})) + IF(U12="Perpetual", 2) +1, "", "Subscribe", "Buy"))

为了稍微分解一下,让我重新格式化以便更容易看到:

=IF(
  B12 <> "", 
  CHOOSE(
    SUM(--(U12={"Subscription","T.E.H","ESA"})) + 
    IF(U12="Perpetual", 2) + 1
    "", "Subscribe", "Buy"
  )
)

我将使用 CHOOSE,它接受一个索引号 N 和一个选项列表,它返回选项列表中的第 N 个元素。为了生成索引,我将使用几种技术。首先看这个:

U12 = {"Subscription", "T.E.H", "ESA"})

这将针对列表中的所有选项测试 U12,并返回一个 TRUE/FALSE 值数组。如果 U12 匹配数组常量中的任何元素,则其中一个值为 TRUE。我们使用 -- 将该数组从 TRUE/FALSE 强制为 0/1,然后使用 SUM 将数组转换为单个值。如果 U12 不匹配任何选项,则为 0,如果匹配,则为 1。

然后我将使用标准 IF 来检查 U12 = Perpetual,如果是则返回 2。将该结果添加到先前的总和中将得到一个最终数字,即 0、1 或 2。

CHOOSE 是 1 索引的,这意味着它期望索引为 1 或更大,因此我们将 1 添加到我们刚刚生成的数字上,并将其与选项列表一起传递给 CHOOSE。

这里的好处是,如果订阅选项发生变化,您只需更改列表,而不必更改一堆嵌套的 IF。此外,如果您需要支持多种购买选项,您可以使用类似的结构:

SUM(--(U12 = {"Subscription", "T.E.H", "ESA"})) +
IF(SUM(--(U12 = {"Perpetual", "Buy Now"})), 2) + 1

如果您需要添加返回值,请继续扩展:

CHOOSE(
  SUM(--(U12 = {"Subscription", "T.E.H", "ESA"})) +
  IF(SUM(--(U12 = {"Perpetual", "Buy Now"})), 2) +
  IF(SUM(--(U12 = {"Release", "Dropping"})), 3) + 1,
  "", "Subscribe", "Buy", "Sell"
)

如果您认为这可能需要维护或选项可能会更改,我会像这样设置它,而不是嵌套 IF。


推荐阅读