代码之家  ›  专栏  ›  技术社区  ›  Michi

对具有多列多行条件的数据进行过滤排序,并使用固定灵活的return_array将相应的数据与其匹配

  •  1
  • Michi  · 技术社区  · 11 月前
    0 A. B C D E F G H J K L M N O P Q
    1. 产品 商店 2023-S 2023万 2024-S 2024-M 类型
    2.
    3. 500
    4. P-线路_A 步骤1
    5. 产品_A 车间3 80 2. 500 22% t1 ColCrit1 ColCrit2 ColCrit3
    6. 产品_B 车间2 320 23% 180 60% t1 产品_D 车间1 t3
    7. 产品_B 车间1 90 8. 300 36% t2 产品_G 车间3 t4
    8. 产品_C 车间3 500 15% 657 16% t1 车间4
    9 产品_D 车间1 160 17% 500 15% t3
    10 产品_D 车间1 500 30% 600 8. t3 rowCrit
    11 产品_D 车间1 130 4. 300 4. t3 2024-S
    12 全部的 1810 3037
    13
    14 600 步骤二
    15 300 _数组 _阵列3 _阵列4
    16 P线_B 2024-S 商店 2023-S
    17 产品_E 车间2 75 10% 450 10% t1
    18 产品_F 车间4 60 8. 370 4. t2
    19 产品_F 车间1 500 11% 850 4. t2 步骤三
    20 产品_G 车间3 350 8. 150 15% t3 开始
    21 产品_G 车间3 60 47% 600 7. t4 10 2.
    22 产品_G 车间4 90 25% 830 35% t4
    23 产品_G 车间2 390 9% 325 13% t1
    24 产品_G 车间3 90 30% 300 9% t3 步骤四
    25 产品_G 车间4 90 5. 300 12% t3 产品 类型 商店 2023万 2024-S
    26 产品_G 车间4 120 24% 300 24% t4 产品_D t3 车间1 500 600
    27 产品_G 车间4 135 35% 480 17% t4 产品_G t4 车间3 60 600
    28 产品_H 车间2 935 27% 230 16% t1 产品_D t3 车间1 160 500
    29 产品_I 车间3 134 18% 600 42% t2 产品_G t4 车间4 135 480
    30 全部的 3029 5785 产品_D t3 车间1 130 300
    31 产品_G t3 车间3 90 300
    32 产品_G t3 车间4 90 300
    33 产品_G t4 车间4 120 300
    34 产品_G t3 车间3 350 150
    35
    36

    目标

    最终输出为 Range M26:Q34 它是基于的降序列表 lookup_array 在里面 Cell M16 以及多个列和行筛选器( Range M6:M8, Range N6:O8 , Range O6:O8 Cell M11 )以及基于 Cell M21 Cell N21 .

    要获得此列表,需要执行以下步骤:
    (您也可以在M列的表格中看到步骤,以便更容易地按照说明进行操作)

    1. 在中定义多列条件 Range M6:O6 和中的一行标准 单元格M11 。这些标准都是 AND 筛选列表后,应按降序排列。
    2. 基于步骤1,您将有一个满足列和行条件的降序列表。对于此列表,相应的值基于 ret_array3 在里面 Cell N16 ret_array4 在里面 Cell O16 应添加。
      笔记 查找数组 = rowCrit --> 单元格M16 = 单元格M11 )

    与…对比 this question 前两列 Product Type 是固定的,这意味着它们在默认情况下应该始终显示。
    根据中的输入,只有后面的列是灵活的 单元格N16 O16细胞 .
    应该可以很容易地连锁更多 ret_arrays 到公式。

    1. 从第2步中的列表中,仅根据位置进行排名的值 单元格M21 单元格N21 应显示。
      在这种情况下 10 positions 之后 1st position .
    2. 在步骤1-3之后的步骤4中,最终列表应该出现。

    我需要如何修改公式 这个问题 让它发挥作用?

    =LET(
        _a, COUNTIF(M6:M8,A1:A31)+AND(M6:M8=""),
        _b, COUNTIF(N6:N8,C1:C31)+AND(N6:N8=""),
        _c, COUNTIF(O6:O8,K1:K31)+AND(O6:O8=""),
        _d, TOROW(HSTACK(N16,O16,M16),1),
        _e, CHOOSECOLS(A1:K31,XMATCH(_d,A1:K1)),
        _f, COLUMNS(_d),
        _g, SORT(FILTER(HSTACK(_e,FILTER(A1:K31,A1:K1=M11,"")),_a*_b*_c,""),_f+1,-1),
        VSTACK(_d, WRAPROWS(TOCOL(INDEX(_g,SEQUENCE(M21,,N21),SEQUENCE(,_f)),2),_f)))
    
    1 回复  |  直到 11 月前
        1
  •  0
  •   Mayukh Bhattacharya    11 月前

    尝试以下公式:

    enter image description here


    =LET(
        _a, COUNTIF(M6:M8,A1:A31)+AND(M6:M8=""),
        _b, COUNTIF(N6:N8,C1:C31)+AND(N6:N8=""),
        _c, COUNTIF(O6:O8,K1:K31)+AND(O6:O8=""),
        _d, TOROW(HSTACK("Product","Type",N16,O16,M16),1),
        _e, CHOOSECOLS(A1:K31,XMATCH(_d,A1:K1)),
        _f, COLUMNS(_d),
        _g, SORT(FILTER(HSTACK(_e,FILTER(A1:K31,A1:K1=M11,"")),_a*_b*_c,""),_f+1,-1),
        VSTACK(_d, WRAPROWS(TOCOL(INDEX(_g,SEQUENCE(M21,,N21),SEQUENCE(,_f)),2),_f)))