【问题标题】:Google Sheets formula with variable number of disjoint columns具有可变数量不相交列的 Google 表格公式
【发布时间】:2019-09-02 02:04:48
【问题描述】:

在表中,我有多个不相交的列,含义相似:“这一行有趣吗?”

我想创建一个数组公式来获取所有有趣的行。我该如何处理?

示例表:

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

实际的表被分成几张表,每张表上都有不同的 id 子集。

我目前的方法是使用 INDIRECT 函数不接受数组或范围。我首先搜索我的列:FILTER(COLUMN(A1:1), REGEXMATCH(A1:1, "interesting")),然后将列地址转换为范围,但是当我将结果提供给 INDIRECT 时,它只返回第一列。

所需的公式将输出一组唯一对象 ID,其中每一行至少对一种情况感兴趣。

更新:这是针对此问题的test table。有 3 张表:带有 ids 的学生数据和 2 个程序。每个程序都有几个考试(事先不知道。所需的公式将输出一组唯一的学生 id,其中至少有 1 次通过考试(在测试表中:1、3、4、6)

【问题讨论】:

  • 有趣的列不在固定/已知位置吗?
  • @player0 没有,他们的数量随着新案件的增加而不断增加
  • 从您的示例中,您只需要第 5 行吗?还是 1,3 和 5?
  • @player0 在本例中:1,3,5。我无法分享原始表格,但我做了一个(希望)足够的测试示例,请参阅更新后的帖子

标签: google-sheets google-sheets-formula


【解决方案1】:
={"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"), ))

【讨论】:

  • 我是否理解正确,您不是在特定列中寻找“通过”,而是在整个工作表中寻找“通过”?这对我也有用,我只是没想过
  • 那种。我所做的是:我将所有列合并为 1 列,并将所有“通过”转换为黑桃,然后正则表达式从每一行中只取出一个黑桃。然后将所有黑桃转换回“PASS”或相应的 ID
猜你喜欢
  • 1970-01-01
  • 2022-07-04
  • 1970-01-01
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
  • 2011-06-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多