根据不在数组中的值对索引输出进行排序

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

我有一个 Google 表格,其中每列代表一个不同的主题,每列包含 5 组,每组 5 行,概述了主题详细信息以及分配的名称和状态。

感谢 @rockinfreakshow 在 this 线程上的帮助,我使用以下公式从上到下搜索每一列,并在状态不是“完成”时显示指定名称的前 5 个匹配项的主题及其详细信息:

=INDEX(SPLIT(ARRAY_CONSTRAIN(TOCOL(IF(($C5:$I21=B32)*($C6:$I22<>"Complete"),$C2:$I2&"|"&$C3:$I19,),1,1),5,1),"|"))

但是,我现在想弄清楚的是如何按第 4、8、12、16 和 20 行中的优先级对这些数据进行排序。(如果没有优先级,则数据应按以下顺序出现)从上到下、从左到右的列,在具有优先级的数据之后。)这是我希望输出数据的顺序:

我尝试过使用 SORT,但我不确定如何将其指向优先级数据,因为这似乎是按数组第一行中的数据排序:

=INDEX(SORT(SPLIT(ARRAY_CONSTRAIN(TOCOL(IF(($C5:$I21=B32)*($C6:$I22<>"Complete"),$C2:$I2&"|"&$C3:$I19,),1,1),5,1),"|"),3,1))

我怎样才能最好地实现我正在寻找的目标?

google-sheets google-sheets-formula
1个回答
0
投票
  • 创建一个自定义

    filter_
    函数,当输入
    res
    等于特定条件(例如
    R
    )时,它会给出所需的
    n
    ult
    dataRange
    a
    Bob
    ge。

  • 使用此

    filter_
    通过提供必要的
    topics
    来获取
    priority
    details
    OFFSET

  • SORTN
    为基础,以
    priority
    结束。

=ARRAYFORMULA(LET(
    dataRng, C3:E22,
    cond, B24,
    filter_,LAMBDA(resRng,TOCOL(IF(dataRng=cond,resRng,))),
    topics, filter_(C2:E2),
    priority, filter_(OFFSET(dataRng,-1,0)),
    details, filter_(OFFSET(dataRng, -2,0)),
    SORTN({topics,details, priority},5,2,3,1) 
))
© www.soinside.com 2019 - 2024. All rights reserved.