从表中提取多行的数组公式

问题描述 投票:0回答:1

我有一个表格,两列,第一列填充 A,B,C,D,...Z,第二列填充 1,2,3,4,5,6,7,8,9

我必须查找一些特定的字母 A、B、C、D 并将它们对应的值堆叠在一起,通过我的手动输入,结果应该看起来像 1,2,3,5,9

下面的分享表应该清楚地描述了我的情况。

这是我分享的谷歌表格。

https://docs.google.com/spreadsheets/d/19YU21ZMv_fYWaiicxzp70CmFBogkpTJlhzFm7j-yqN4/edit?usp=sharing

我尝试了涉及 BYROW()、VSTACK、QUERY 的公式,但这使我的工作表显着变慢,因为我的表并不像上面的工作表那样只有 19 行。我的表应该有 4000 多行。

有什么办法可以让它更快吗?

google-sheets
1个回答
0
投票

我查看了您共享的 Google 表格。让我帮你优化这个查找和堆叠操作。

对于您想要的具体情况:

  1. 查找特定字母的值(A、B、C、D)
  2. 将它们与手动输入结合起来 (9)
  3. 将它们显示为逗号分隔列表 (1,2,3,5,9)

这里有一个更有效的公式解决方案:

=JOIN(",",{VLOOKUP({"A";"B";"C";"D"},A2:B,2,FALSE);9})

这种方法更好,因为:

  1. VLOOKUP
    通常比
    QUERY

  2. JOIN
    比数组操作函数更高效

  3. 我们避免使用

    BYROW
    ,这在大型数据集上可能会占用大量资源

  4. 大括号

    {}
    创建一个简单的数组,无需复杂的操作

    =JOIN(",",FILTER(B2:B,REGEXMATCH(A2:A,"^[A-D]$"))&",9")

这两个公式的性能应该明显优于使用

BYROW
VSTACK
QUERY
组合,尤其是对于 4000 多行数据。 主要优点:

  • 降低计算复杂度
  • 无数组处理开销
  • 直接查找而不是查询
  • 单程操作

如果您的查找字母是固定的(A、B、C、D),请选择第一个公式;如果您需要更灵活地匹配字母,请选择第二个公式。

© www.soinside.com 2019 - 2024. All rights reserved.