【问题标题】:Using nested IF function in excel: is there a way to check next row for same IF function?在 excel 中使用嵌套的 IF 函数:有没有办法检查下一行是否有相同的 IF 函数?
【发布时间】:2020-10-06 13:50:05
【问题描述】:

假设我有一个只有 2 列的简化表。第一列是组号,具有不同大小的组。第 2 列也有编号,但有很多空白。

如果它仍然在同一个第一列组中,我基本上想用下一个 NOT 空白填充这些空白。

我不知道在这里显示表格是否有效,但这就是现在的情况,也是我想通过简化数据集实现的目标:

我尝试的是使用 If 函数。首先,它检查 B1 是否为空白。如果它是空白的,我希望它检查 A1 是否与 A2 相同的“组”值。如果这也是真的,那么我希望公式返回 B2 的值。但是,如果 B2 也是空白,我希望它循环:检查 A1/A2 是否与 A3 相同,然后给出 B3 的值。并继续。加!如果 B1 开始时不是空白,则只需返回值 B1。如果 B1 为空白但 A1 与 A2 不是同一组,我希望它保持空白(或者 0 也可以)。

我这样做的唯一方法是制作一个极其嵌套的 if 函数,该函数不断重复 [if true] 部分,如下所示:

=IF(B2="";(IF(A2=A3;
(IF(B3="";(IF(A3=A4;
(IF(B4="";(IF(A4=A5;
(IF(B5="";(IF(A5=A6;
(IF(B6="";(IF(A6=A7;
(IF(B7="";(IF(A7=A8;
(IF(B8="";(IF(A8=A9;"xx";""))
;B8));""));B7));""));B6));""));B5));""));B4));""));B3));""));B2)

但是,有时一个组中有 100 多个空白,我试图避免循环该公式的 100 多个重复。现在,当一个组中没有足够的循环时,它会显示 xx。有没有办法用B列的连续单元格替换B1?我查看了 Row 函数,但如果我理解正确,它只有在您将其拉下时才有效。

非常感谢您的帮助!

【问题讨论】:

  • 你最好的选择是 vba 而不是公式。

标签: excel excel-formula


【解决方案1】:

如果您确实想尝试一个公式,这样的方法会起作用:

=IF(B2<>"",B2,IFERROR(INDEX(B2:B$19,MATCH(A2,IF(B2:B$19<>"",A2:A$19),0)),""))

在我的 Excel (2019) 版本中使用 CtrlShiftEnter 作为数组公式输入。

内部 IF 语句生成一个数组,其中只有 B 列中具有数字的行的值等于 A 列中的组值,否则它将默认为 FALSE,所以你得到

False
False
1
False
1
False
False
2
False
...

然后您对数组中当前行中的 A 的值进行匹配,以查找 B 列中存在非空值的下一行(第一种情况下为 3)。然后 Index 从 Match 找到的行中的 B 列中生成相应的值(第一种情况下为 1)。

如果匹配失败是因为当前组中没有其他条目(如屏幕截图的第 15 和 16 行),那么它将调用 IFERROR 语句中的“”,因此您会在该行中得到一个空白。

如果您希望在这些单元格中使用零而不是空白,则可以将 IFERROR 更改为零:

=IF(B2<>"",B2,IFERROR(INDEX(B2:B$19,MATCH(A2,IF(B2:B$19<>"",A2:A$19),0)),0))

【讨论】:

  • 太棒了!非常感谢您抽出宝贵时间。但我不完全明白,你能解释一下为什么第 15 行和第 16 行现在返回空白吗?
  • 我会将其添加到我的答案中。您可能会发现这太慢了,但如果您有数千行数据,我的目标是添加一个更高效的版本,但可能要等到以后。
猜你喜欢
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-08
  • 2015-02-14
  • 1970-01-01
  • 2020-01-06
相关资源
最近更新 更多