【问题标题】:Pulling a range based on one criteria根据一个标准拉取范围
【发布时间】:2019-12-20 14:38:15
【问题描述】:

我有一个公式可以让我将多行连接在一起并删除重复项:

=TEXTJOIN(" ", 1, UNIQUE(TRANSPOSE(FILTER(Sheet1!A:D, NOT(REGEXMATCH(LOWER(Sheet1!A:D), "n/a"))))))

我遇到的问题是因为它引用了同一张表中的另一个选项卡,它不能在不改变结果的情况下按不同的列排序。

所以我想知道的是:如何修改上述公式,以便它根据我给它的标准提取所需的数据?请注意,这需要跨越一系列单元格并包含文本字符串。

【问题讨论】:

  • 我还是不明白你的确切标准是什么。你能举例说明你的预期行为吗?如果您对它感到满意,您可以尝试使用 Apps Script 来实现。
  • 当然,很抱歉造成混乱。在上面提供的表格中,您会注意到有两个选项卡。在表 1 中,我使用 G 列中提供的公式将所有值连接在一起,在每个值之间添加一个空格,并删除任何重复的条目。而且效果很好!问题是:在第 2 页上,我试图将相同的定义与正确的单词匹配。所以猫定义与猫、房子和房子等一起使用。这很好,除了我需要不时按任一工作表上的 B 列排序,这会弄乱公式的结果。条件必须是 A 列中的值。

标签: google-sheets google-sheets-formula array-formulas google-sheets-query textjoin


【解决方案1】:

在您发表评论后,我了解您要做什么。基本上,您想检索与“行键”匹配的第一张工作表的信息。

你没有使用VLOOKUP有什么原因吗?

例如使用这个公式:

=IFNA(VLOOKUP(A1,Sheet1!A:G, 7, FALSE), "VALUE NOT FOUND")

如果你 sort 或随机化列 B 的范围,你会得到如下结果:

在这里您可以看到每个描述都跟上它的关键。


编辑:因此,在您发表评论后,您似乎没有在单个单元格中拥有您的信息。您可以将此单元格创建为占位符,以便稍后检索信息。

或者,如果您需要,您可以在公式中进行此操作,这可能会使这有点混乱,但仍然可行。

=TEXTJOIN(" ", 1, 
    UNIQUE(
        TRANSPOSE(
            FILTER({VLOOKUP(A1, Sheet1!A:G, 3, FALSE), VLOOKUP(A1, Sheet1!A:G, 4, FALSE), VLOOKUP(A1, Sheet1!A:G, 5, FALSE), VLOOKUP(A1, Sheet1!A:G, 6, FALSE)},
                   NOT(LOWER({VLOOKUP(A1, Sheet1!A:G, 3, FALSE), VLOOKUP(A1, Sheet1!A:G, 4, FALSE), VLOOKUP(A1, Sheet1!A:G, 5, FALSE), VLOOKUP(A1, Sheet1!A:G, 6, FALSE)}) = "n/a")
            )
        )
    )
) 

【讨论】:

  • 抱歉,我上一条评论的字符用完了。表 1 上的 G 列仅作为我希望它在表 2 上的示例。我希望我的结果仅存在于表 2 上。
  • 相当混乱,但它完成了工作!非常感谢!
【解决方案2】:

尝试:

=ARRAYFORMULA(IFNA(VLOOKUP(TO_TEXT(B1:B), {QUERY(TRANSPOSE(QUERY(QUERY(
 UNIQUE(TRIM(SPLIT(TRANSPOSE(SPLIT(QUERY(TRANSPOSE(QUERY(TRANSPOSE(
 IF(Sheet1!C:E="",,"♥"&ROW(Sheet1!C:C)&"♦"&Sheet1!C:E)),,999^99)),,999^99), "♥")), "♦"))), 
 "where not lower(Col2) matches 'n/a'", 0), 
 "select max(Col2) group by Col2 pivot Col1")), "select Col1", 0), TRANSPOSE(QUERY(QUERY(
 QUERY(QUERY(UNIQUE(TRIM(SPLIT(TRANSPOSE(SPLIT(QUERY(TRANSPOSE(QUERY(TRANSPOSE(
 IF(Sheet1!C:E="",,"♥"&ROW(Sheet1!C:C)&"♦"&Sheet1!C:E)),,999^99)),,999^99), "♥")), "♦"))), 
 "where not lower(Col2) matches 'n/a'", 0), 
 "select max(Col2) group by Col2 pivot Col1"), "offset 1", 0),,999^99))}, 2, 0)))

【讨论】:

  • 对不起,如果我不清楚,但条件必须是 A 列中的值,而不是 B 列中的值。我希望工作表能够按任一工作表上的 B 列排序并且仍然在 C 列中保留相同的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-12
  • 2023-01-13
  • 2022-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多