7

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

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

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

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

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

您可以在这里查看我的测试 Google 表格 或使用 ARRAYFORMULA(B 列)在此处查看快照,没有它(C 列)以及我想要获得的内容(D 列):

带有键/值对的 KEY 表

带有按键数据的数据表

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

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

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

4

3 回答 3

6

在第 3 行,请尝试:

=ArrayFormula(vlookup(A3:A;KEYS!A$1:B$5;2;0))
于 2015-09-03T20:11:59.653 回答
1

您可以使用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();
};
于 2019-07-05T09:22:09.887 回答
0

尝试:

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

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

于 2015-09-04T13:17:34.840 回答