复杂的IF。Excel中的公式

玛格达91

我检查了有关 IF 公式的各种帖子,但找不到在我的报告中获得正确结果的方法。我管理交货,我想根据交货报告中的数据计算延迟天数。诀窍是延迟将取决于交付状态,因为在每种情况下,我都必须考虑 Excel 中的不同日期和列。这些是数据:

交货状态:

  1. 确认的
  2. 卸载
  3. 卸货
  4. 还没有确定
  5. 开始
  6. 途中
  7. 取件待定
  8. 准备好了

此交付状态在我的原始数据报告的 C 列中更新。对于每个,我将不得不以不同的方式计算延迟,因此我认为 IF 公式可能有用。

您可以在下方看到包含计算相关日期的列:

用于计算的参考列

交货状态和参考日期:

  1. 确认 - D
  2. 卸载 - D
  3. 卸载-D
  4. 未确认 - S
  5. 开始 - D
  6. 途中 - S
  7. 取件待定 - E
  8. 准备 - S

我做了这个公式如下,遗憾的是,只有第一条记录计算正确,其余的延迟为“空”。

=IF(C2="Confirmed";(TODAY()-D2);IF(C2="Unloaded";(TODAY()-D2);IF(C2="Unloading";(TODAY()-D2);IF(C2="Not confirmed";(TODAY()-S2);IF(C2="Started";(TODAY()-D2);IF(C2="In route";(TODAY()-S2);IF(C2="Pick-up pending";(TODAY()-E2);IF(C2="Prepared";(TODAY()-S2);"null"))))))))

你碰巧知道我在哪里犯了我没有看到的错误吗?我将不胜感激任何帮助。如果它也相关,我正在使用 Excel 2016。

查拉卡

将其分解,使长行变得可读。

=IF(C2="Confirmed";
     (TODAY()-D2);
     IF(C2="Unloaded";
       (TODAY()-D2);
       IF(C2="Unloading";
         (TODAY()-D2);
         IF(C2="Not confirmed";
            (TODAY()-S2);
            IF(C2="Started";
              (TODAY()-D2);
              IF(C2="In route";
                (TODAY()-S2);
                IF(C2="Pick-up pending";
                  (TODAY()-E2);
                  IF(C2="Prepared";
                    (TODAY()-S2);
                    "null"
                  )
                )
              )
            )
          )
        )
      )
    )

乍一看,我在这里看到的基本上是一个垂直查找时间表。

所以,我创建了这两列。一种是我们正在寻找的文本状态。
另一个是计算日期。

单人约会VLOOKUp

假设 D2、S2 和 E2 是固定字段,我制定了公式 =TODAY() - $D$2

垂直查找

然后在正确的字段中执行 VLOOKUP 是一件简单的事情。
因为我们正在使用日期类型字段,所以我们需要将数字转换为文本以获得有意义的完整日期。(我在截图中使用 JJ 多年,因为我有荷兰语环境)
然后我们还需要处理 VLOOKUP 找不到任何东西时,为此我们使用 IFERROR。

=IFERROR(TEXT(VLOOKUP(F6;$A$2:$B$9;2);"MM-DD-YY");"NULL")

查询

现在您有了一个易于扩展的查找表,您可以将其放在任何地方、隐藏在工作器选项卡上等等。您可以在其中计算您的值,您可以在其中添加和删除值。

许多行,许多日期

但是,假设您有许多具有不同状态和日期的行,并且您想知道需要多少天。那么这个垂直查找看起来没有那么有用,因为它只能用于一行。

我们仍然可以利用 VLOOKUP 让我们的生活更轻松

Assuming there are dates in colums D, E and S

=IFERROR(DATEDIF(TODAY();INDIRECT(ADDRESS(ROW();VLOOKUP(F2;$A$2:$B$9;2;FALSE)));"d");"NULL")

We use VLOOKUP to see which column we need to look in. We use a number here for column, not a letter.
We then use ADDRESS to get an excel address reference for the current ROW(), and the column we found via vlookup
We funnel that through INDIRECT so we can get the value from that targeted cell.
Then we get a DATEDIFference in days from offset today. We wrap it all in an IFERROR to keep things clean.

查找能力

  • You could use an INDEX($D2:$S2;0;VLOOKUP($F2;$A$2:$B$9;2;FALSE)) to get the same effect, as pointed out by Dirk Reichel but you have to mindful then that the index used is from the start of the matrix range. So here the matrix starts on row D. So D2 is index 1 instead of 4 it is with my original method, so you'd need to adjust the lookup table accordingly.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章