Google 具有可变数量的不相交列的工作表公式
Google Sheets formula with variable number of disjoint columns
在 table 中,我有多个具有相似含义的不相交的列:“这一行有趣吗?”
我想创建一个数组公式来获取所有感兴趣的行。我该如何解决这个问题?
示例table:
Obj id | Case 1 data | Case 1 interesting? | Case 2 data | Case 2 interesting?
1 | … | YES | … | NO
2 | … | NO | … | NO
3 | … | NO | … | YES
4 | … | NO | … | NO
5 | … | YES | … | YES
6 | … | NO | … | NO
实际的 table 被分成几个 sheet,每个 sheet 上有不同的 id 子集。
我目前的方法是使用不接受数组或范围的 INDIRECT
函数。我首先搜索我的列:FILTER(COLUMN(A1:1), REGEXMATCH(A1:1, "interesting"))
,然后我将列地址转换为范围,但是当我将结果提供给 INDIRECT
时,它只 returns 第一列。
所需的公式将输出一组唯一的对象 ID,其中每一行至少对一种情况有意义。
更新:这是针对此问题的 test table。有 3 个 sheets:带有 id 和 2 个程序的学生数据。每个程序都有几项考试(事先不知道。所需的公式将输出一组唯一的学生 ID,其中至少有 1 项通过考试(在测试中 sheet:1、3、4、6)
={"Passing"; ARRAYFORMULA(UNIQUE(QUERY({
IF(IFERROR(REGEXEXTRACT(REGEXREPLACE(TRIM(TRANSPOSE(QUERY(
TRANSPOSE('Program 1'!A1:Z), , 999^99))), "Pass", "♠"), "♠"))="♠", 'Program 1'!A1:A, );
IF(IFERROR(REGEXEXTRACT(REGEXREPLACE(TRIM(TRANSPOSE(QUERY(
TRANSPOSE('Program 2'!A1:Z), , 999^99))), "Pass", "♠"), "♠"))="♠", 'Program 2'!A1:A, )},
"where Col1 is not null order by Col1", 0)))}
如果你想VLOOKUP
它:
=ARRAYFORMULA(IF(LEN(A2:A), IF(IFERROR(VLOOKUP(A2:A, UNIQUE(QUERY({
IF(IFERROR(REGEXEXTRACT(REGEXREPLACE(TRIM(TRANSPOSE(QUERY(
TRANSPOSE('Program 1'!A1:Z), , 999^99))), "Pass", "♠"), "♠"))="♠", 'Program 1'!A1:A, );
IF(IFERROR(REGEXEXTRACT(REGEXREPLACE(TRIM(TRANSPOSE(QUERY(
TRANSPOSE('Program 2'!A1:Z), , 999^99))), "Pass", "♠"), "♠"))="♠", 'Program 2'!A1:A, )},
"where Col1 is not null", 0)), 1, 0))<>"", "PASS", "FAIL"), ))
在 table 中,我有多个具有相似含义的不相交的列:“这一行有趣吗?”
我想创建一个数组公式来获取所有感兴趣的行。我该如何解决这个问题?
示例table:
Obj id | Case 1 data | Case 1 interesting? | Case 2 data | Case 2 interesting?
1 | … | YES | … | NO
2 | … | NO | … | NO
3 | … | NO | … | YES
4 | … | NO | … | NO
5 | … | YES | … | YES
6 | … | NO | … | NO
实际的 table 被分成几个 sheet,每个 sheet 上有不同的 id 子集。
我目前的方法是使用不接受数组或范围的 INDIRECT
函数。我首先搜索我的列:FILTER(COLUMN(A1:1), REGEXMATCH(A1:1, "interesting"))
,然后我将列地址转换为范围,但是当我将结果提供给 INDIRECT
时,它只 returns 第一列。
所需的公式将输出一组唯一的对象 ID,其中每一行至少对一种情况有意义。
更新:这是针对此问题的 test table。有 3 个 sheets:带有 id 和 2 个程序的学生数据。每个程序都有几项考试(事先不知道。所需的公式将输出一组唯一的学生 ID,其中至少有 1 项通过考试(在测试中 sheet:1、3、4、6)
={"Passing"; ARRAYFORMULA(UNIQUE(QUERY({
IF(IFERROR(REGEXEXTRACT(REGEXREPLACE(TRIM(TRANSPOSE(QUERY(
TRANSPOSE('Program 1'!A1:Z), , 999^99))), "Pass", "♠"), "♠"))="♠", 'Program 1'!A1:A, );
IF(IFERROR(REGEXEXTRACT(REGEXREPLACE(TRIM(TRANSPOSE(QUERY(
TRANSPOSE('Program 2'!A1:Z), , 999^99))), "Pass", "♠"), "♠"))="♠", 'Program 2'!A1:A, )},
"where Col1 is not null order by Col1", 0)))}
如果你想VLOOKUP
它:
=ARRAYFORMULA(IF(LEN(A2:A), IF(IFERROR(VLOOKUP(A2:A, UNIQUE(QUERY({
IF(IFERROR(REGEXEXTRACT(REGEXREPLACE(TRIM(TRANSPOSE(QUERY(
TRANSPOSE('Program 1'!A1:Z), , 999^99))), "Pass", "♠"), "♠"))="♠", 'Program 1'!A1:A, );
IF(IFERROR(REGEXEXTRACT(REGEXREPLACE(TRIM(TRANSPOSE(QUERY(
TRANSPOSE('Program 2'!A1:Z), , 999^99))), "Pass", "♠"), "♠"))="♠", 'Program 2'!A1:A, )},
"where Col1 is not null", 0)), 1, 0))<>"", "PASS", "FAIL"), ))