【问题标题】:How to use ARRAYFORMULA + FILTER within Google Spreadsheet?如何在 Google 电子表格中使用 ARRAYFORMULA + FILTER?
【发布时间】:2015-11-29 16:20:21
【问题描述】:

我有一个基本上包含键/值对字典的 Google 电子表格。钥匙是独一无二的。在第二张表中,我需要为字典中的每个键添加一个或多个行,其中包含一些数据。在这张表中,我还需要报告每个键的正确值。

为此,我尝试将 ARRAYFORMULA 函数与第二张表的第一行上的许多其他函数结合起来,以避免(如果可能)需要在值列的所有行上复制相同的公式。

到目前为止,QUERY 和 FILTER 都不起作用。

QUERY 要求所有数据(包括 WHERE 谓词的参数)驻留在单个工作表上。在我的情况下,过滤键将在第二张纸上,而字典在第一张纸上。所以这个根本不能用。

FILTER 在与 ARRAYFORMULA 结合使用和不使用时似乎有一种奇怪的(对我而言)行为。

你可以看看我的测试 Google Sheet here 或此处使用 ARRAYFORMULA(B 列)的快照,没有它(C 列)以及我想要获得的内容(D 列):

比 pnuts 的解决方案更进一步提供了没有“N/A”单元格的“完美”结果:

=ARRAYFORMULA(IF(A3:A="";"";VLOOKUP(A3:A;KEYS!A1:B;2;FALSE)))

当然,对性能有重大影响,因为 VLOOKUP 对第二张表中的每一行运行一次(这也是我尝试使用 FILTER 的原因)。 即使使用当前链接的示例表,这些性能也相当低,这真的很瘦。

【问题讨论】:

  • 很高兴知道为什么它被否决了。

标签: google-sheets array-formulas gs-vlookup


【解决方案1】:

在Row3请尝试:

=ArrayFormula(vlookup(A3:A;KEYS!A$1:B$5;2;0))

【讨论】:

  • 效果非常好。在 D8 中,我找到一个“N/A”单元格,并在执行 VLOOKUP 期间带有备注“找不到值”。即使我在 KEYS 表中添加了一个空键。
  • 好点。我对 KEYS 表的大小没有明确的了解。我宁愿需要从 KEYS 中排除所有空白行。
  • 我是从 pnuts 的解决方案开始的。谢谢。
  • 即使对键进行排序也会对性能产生重大影响。当然我是在用真实数据进行测试,其中键大约是 20,数据大约是 200。无论如何,它不会是这样的......
【解决方案2】:

您可以使用From spreadsheet - On change 事件触发器来调用如下代码:

function CopyPasteWastageRows() {
    var spreadsheet = SpreadsheetApp.getActive().getSheetByName("<<Sheet-Name>>");
    spreadsheet.getRange('Q2').activate();
    var currentCell = spreadsheet.getCurrentCell();
    spreadsheet.getSelection().getNextDataRange(SpreadsheetApp.Direction.DOWN).activate();
    currentCell.activateAsCurrentCell();
    spreadsheet.getRange('Q2').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
    spreadsheet.getRange('Q2').activate();
};

【讨论】:

    【解决方案3】:

    试试:

    =ARRAYFORMULA(IF(LEN(A3:A); VLOOKUP(A3:A;KEYS!A1:B;2;FALSE);))
    

    这应该得到键,只要在 col A 中输入值。

    【讨论】:

      猜你喜欢
      • 2018-10-17
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      相关资源
      最近更新 更多