【问题标题】:use ARRAYFORMULA to find all matching rows/values in a source table from a lookup table使用 ARRAYFORMULA 从查找表中查找源表中的所有匹配行/值
【发布时间】:2020-07-26 21:31:45
【问题描述】:

我有一个像这样的源表。如您所见,每个Lookup Value 可以有一个或多个Result

| Lookup Value | Result |
|--------------|--------|
| a            | a1     |
| a            | a2     |
| a            | a3     |
| b            | b1     |
| b            | b2     |
| c            | c1     |
| c            | c2     |

然后我有一个像这样的输入表:

| queries | results |         |         |         |         |         |
|---------|---------|---------|---------|---------|---------|---------|
| a       | ...     | ...     | ...     | ...     | ...     | ...     |
| c       | ...     | ...     | ...     | ...     | ...     | ...     |

每一行的... 应该是查找表中的转置值。因此,例如,上表如下所示:

| queries | results |    |    |
|---------|---------|----|----|
| a       | a1      | a2 | a3 |
| c       | c1      | c2 |    |

现在我必须像这样使用多个公式:

我正在尝试用单个 ARRAYFORMULA 替换它,但它似乎不起作用。

还有其他方法可以做到这一点吗?基本上是从查找表中查找所有匹配的行,然后转置它们?

【问题讨论】:

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


    【解决方案1】:

    假设您的“查找值”和“结果”数据从 A1:B 运行(在 A1 和 B1 中具有标题)。并假设您的“查询”列表位于 D1:D(D1 中的标题)中,“结果”标题位于 E1 中。

    根据 A:A 中任何值在 B:B 中可能匹配的最大数量,您可以在 E2 中使用它:

    =ArrayFormula(IFERROR(VLOOKUP(D2:D,QUERY(FILTER({A2:B,COUNTIFS(A2:A,A2:A,ROW(A2:A),"<="&ROW(A2:A))},A2:A<>""),"Select Col1, MAX(Col2) Group By Col1 Pivot Col3"),SEQUENCE(1,10,2),0)))
    

    如果您的最大可能匹配数少于 10 或多于 10,请随时相应地编辑 SEQUENCE 函数的第二个参数。

    请理解,使用这样一个要求处理范围的数组公式,您将无法将其他数据放在您询问数组公式的“查询和结果”下方或右侧的任何位置评估或填写。因此,如果您想要它下面的数据,您需要将您的 VLOOKUP 从 D2:D 限制为,例如,D2:D50(或者您的最大查询范围是什么)。同样,如果 SEQUENCE 函数的第二个参数是 10,则您将“保留”10 列(即 E:N)以获得可能的结果,并且您将无法将数据放在那里,否则您将“中断” " 数组公式。在这种情况下,您可能希望在为公式使用而保留的区域周围给自己一些视觉分界线(例如,更改块的背景颜色或在其周围放置边框等)。

    【讨论】:

      【解决方案2】:

      尝试:

      =ARRAYFORMULA(IFERROR(VLOOKUP(D:D, SPLIT(TRANSPOSE(QUERY(TRANSPOSE(IF(ISNUMBER(
       QUERY(QUERY(A:B, "select A,count(A) where A is not null group by A pivot B"), "offset 1", 0)), 
       QUERY(QUERY(A:B, "select A,count(A) where A is not null group by A pivot B"), "limit  0", 1), 
       QUERY(QUERY(A:B, "select A,count(A) where A is not null group by A pivot B"), "offset 1", 0)))
       ,,999^99)), " "), TRANSPOSE(ROW(INDIRECT("A2:A"&COUNTUNIQUE(B:B)))), 0)))
      

      【讨论】:

        猜你喜欢
        • 2022-11-25
        • 2021-08-21
        • 1970-01-01
        • 2018-02-26
        • 2015-01-28
        • 1970-01-01
        • 2021-08-19
        • 2022-01-16
        • 1970-01-01
        相关资源
        最近更新 更多