根据条件返回一系列非空单元格的Excel公式

问题描述 投票:0回答:1

在下面的示例中,我想在单元格 L4、M4 和 N4 中输入一个公式,该公式将返回给定产品(范围 B:B)的所有口味(范围 C:C)。例如,在单元格 L4 中,公式应查看 L3 中的数据,转到 B3(因为等于 L4),并返回 C4:C9 范围内的所有非空单元格(行 B3 +1 到行 B10-1,直到它在 B 列或表格末尾找到另一个非空单元格)。

注:

  • 给定口味的产品的配方末尾与下一个产品之间始终存在三行。
  • 同一产品的给定口味的配方末尾与另一种口味的下一个配方之间总是有两行

提前感谢您的帮助!

Screenshot

我尝试过 Index、Small 和 Rows 的组合,但找不到正确的公式...

excel excel-formula range
1个回答
0
投票

这个公式组合可能有点复杂,我用换行来解释一下

=FILTER(
OFFSET($B$1,
        MATCH(L$3,$B:$B,0),
        1,
        MATCH(TRUE,NOT(ISBLANK(OFFSET($B$1,MATCH(L$3,$B:$B,0),0,9999,1))),0)-1,
        1), 
OFFSET($B$1,MATCH(L$3,$B:$B,0),1,MATCH(TRUE,NOT(ISBLANK(OFFSET($B$1,MATCH(L$3,$B:$B,0),0,9999,1))),0),1)<>"")

OFFSET => 从参考字段获取具有相对位置的范围的公式。 我们以B1为参考场

OFFSET 有 5 个参数,(参考字段、偏移行、偏移列、范围高度、范围宽度) 参考字段 = B1

以L4为例

  • 偏移行=从值匹配L3开始=> MATCH(L$3,$B:$B,0)
  • offset col = 我们实际需要的值是 col C,1 col 偏移到 B => 1
  • 范围高度=
    • OFFSET($B$1,MATCH(L$3,$B:$B,0),0,9999,1) => 获取 B3 之后的行
    • NOT(ISBLANK(OFFSET($B$1,MATCH(L$3,$B:$B,0),0,9999,1))) => 检查 B3 之后不为空的字段
      • MATCH(TRUE,NOT(ISBLANK(OFFSET($B$1,MATCH(L$3,$B:$B,0)-1,0,9999,1))),0) => 获取 B3 之后的下一个字段并且不为空,即 B10,将是 7
        B10 - B3 = 7
        我们不需要覆盖 B10,所以 -1 = 6
  • 范围宽度=只有一个列就可以了,我们只需要列C => 1

然后我们就可以得到C4中不为空的内容:C9


公式将如下所示:

=FILTER(OFFSET($B$1,MATCH(L$3,$B:$B,0),1,MATCH(TRUE,NOT(ISBLANK(OFFSET($B$1,MATCH(L$3,$B:$B,0),0,9999,1))),0)-1,1),OFFSET($B$1,MATCH(L$3,$B:$B,0),1,MATCH(TRUE,NOT(ISBLANK(OFFSET($B$1,MATCH(L$3,$B:$B,0),0,9999,1))),0)-1,1)<>"")

但需要注意的一件事是,在产品 C 的末尾,需要一些随机文本来显示该行之后没有更多数据。

© www.soinside.com 2019 - 2024. All rights reserved.