Google 工作表不匹配和拆分结果

Google Sheets Unmatch and Split results

如何组合这两个公式:

公式 1:

=FILTER(INDIRECT("RangedName1");ISERROR(MATCH(INDIRECT("RangedName1");FILTER(SORT(UNIQUE(flatten(C3:H14));1;1); SORT(UNIQUE(flatten(C3:H14));1;1)<>"");0)))

第一个公式,从输入范围 C3:H14(本例中的 A 到 F 列)中获取所有值以过滤重复项,然后将结果展平并排序到单个列中,这个展平的范围是然后从 RangeNamed1 中减去,因此结果是单个值列中的范围,这些值未出现在范围 C3:H14.

 Confrontation range         RangedName1    Result
   A       B    .    F            G           H
------------------------------------------------------
Mango   Banana ... Apple      X Apple      Grapes
Banana  Carrot ... Orange     X Banana     Peach
                              X Carrot     .
                              X Orange     .
                                Peach      Watermelon
                              X Mango
                                Grapes
                                .
                                .
                                Watermelon

公式 2:

=ARRAYFORMULA(IFNA(VLOOKUP(TRANSPOSE(SEQUENCE(ROUNDUP(COUNTA(H3:H15)/4);4;ROW(H3:H15)));{ROW(H3:H15)\H3:H15};2;0)))

第二个公式将公式 1 的结果(在此示例中为 H 列)每 4 行分成多列。

等等

                         Split Range
    H           I       J    .    .      M  
-------------------------------------------------
Grapes       Grapes     .             .
Peach        Peach      .             .
.            .          .             .
.            .          .             Watermelon
.
.
.          
Watermelon  

当我尝试将公式 1 用于公式 2(替换 H3:H15)以将它们组合成一个公式时,它给出了 函数 ARRAY_ROW 参数 2 不匹配行大小。预期:1. 错误。

如何将它们组合成一个公式?

拆分前需要升序排序

我创建了一个名为 MK.Help 的新选项卡,并将此公式放入单元格 A19:

=ARRAYFORMULA(IFERROR(HLOOKUP("X";{"X";QUERY({M2:M\ISNA(MATCH(M2:M;FLATTEN(C2:H15);0))};"select Col1 where Col2=TRUE and Col1<>'' order by Col1")};TRANSPOSE(SEQUENCE(ROUNDUP(SUM(ISNA(MATCH(M2:M;FLATTEN(C2:H15);0))*ISTEXT(M2:M))/4);4;2));0)))

它使用一个技巧将字母 X“查找”到一个构造范围内,该范围由放置在显示正确名称的查询顶部的字母 X 组成。该 HLOOKUP 的 [index] 是由数字 4 定义的 SEQUENCE() 数组,您应该在公式中看到它两次。更改 4 以更改结果的形状。

要将 J 列分配到每列 4 个一组的黄色单元格中,您可以使用:

=ARRAYFORMULA(TRANSPOSE(SPLIT(TRANSPOSE(TRIM(QUERY(QUERY(QUERY(
 {(ROUNDDOWN(SEQUENCE(COUNTA(
 FILTER(INDIRECT("NamedRange1"); ISERROR(MATCH(INDIRECT("NamedRange1");
 FILTER(SORT(UNIQUE(FLATTEN(C2:H15)); 1; 1); 
 SORT(UNIQUE(FLATTEN(C2:H15)); 1; 1)<>""); 0)))); 1; 0; 1)/N1))+1\
 FILTER(INDIRECT("NamedRange1"); ISERROR(MATCH(INDIRECT("NamedRange1");
 FILTER(SORT(UNIQUE(FLATTEN(C2:H15)); 1; 1); 
 SORT(UNIQUE(FLATTEN(C2:H15)); 1; 1)<>""); 0)))}; 
 "select max(Col2) group by Col2 pivot Col1"); "offset 1"; 0);; 9^9))); " ")))

注意N1是集合变量。可以轻松更改为您想要的任何网格分布,或者如果您愿意,可以直接硬编码为 4

或者这样尝试:

=ARRAYFORMULA(TRANSPOSE(SPLIT(TRANSPOSE(TRIM(QUERY(QUERY(QUERY(
 {(ROUNDDOWN(SEQUENCE(COUNTUNIQUE(
 FILTER(M2:M; NOT(COUNTIF(FLATTEN(C2:H15); M2:M)))); 1; 0; 1)/A19))+1\QUERY(
 FILTER(M2:M; NOT(COUNTIF(FLATTEN(C2:H15); M2:M))); "where Col1 is not null")}; 
 "select max(Col2) group by Col2 pivot Col1"); "offset 1"; 0);; 9^9))); " ")))