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))); " ")))
如何组合这两个公式:
公式 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))); " ")))