首页 > 解决方案 > Google Sheet:如何使用 arrayformula 将数据从一张表复制到另一张表?

问题描述

在 Google 电子表格中,我想将 sheet1 中的 A2:G500 同步到 sheet2,我知道以下两种方法:

  1. 使用IMPORTRANGE:将以下公式放入sheet2的A1中:

    =IMPORTRANGE("电子表格网址",sheet1!A2:G500)

它有效,但感觉好像我做得过火了,此外似乎存在性能问题

  1. 在 sheet2 的 A2 中,放入公式=sheet1!A2,然后将公式拖到 sheet2 中的 G500 处。这是一个直观且简单的操作。但是,如果 sheet1 是表单响应表,则它不起作用 - 添加新响应时,sheet2 不会自动获取它。

出于学习目的,我想知道是否有办法使用Arrayformula. 此外,我想找到一种方法让这种同步更加轻松,这意味着如果有不确定的数据行,我不必时不时地回到这张表并更改公式或手动拖动公式。这可能吗?并且是Arrayformula实现此目的的正确方法吗?

标签: google-sheetsgoogle-sheets-formula

解决方案


我会推荐一个{ 数组表达式 },如下所示:

={ Sheet1!A2:G }

这或多或少与

=arrayformula(Sheet1!A2:G)

...但我更喜欢这种{}语法,因为它允许您指定不相邻的列。例如,您可以跳过列DF如下所示:

={ Sheet1!A2:C, Sheet1!E2:E, Sheet1!G2:G }

在区域设置使用逗号作为小数点而不是句点的电子表格中,使用反斜杠\而不是逗号作为水平分隔符。

要跳过,请使用分号;作为垂直分隔符。例如,您可以2:9像这样跳过行:

={ Sheet1!A1:G1; Sheet1!A10:G }

开放式范围引用的A10:G意思是“从第 2 行开始并一直延伸到工作表底部的 A 到 G 列”。

您还可以省略行号以获得开放式范围引用A:G,例如“从工作表的最顶部到底部的 A 到 G 列”。此引用的行为与几乎所有情况下的行为相同A1:G。我已经养成了始终在参考中包含起始行的习惯,因为这样,如果在第 1 行上方插入一行,公式将自动调整。

当源表是表单响应表时,需要另一种策略。表单响应始终插入到无法提前直接引用的新创建的行中。

为避免在将表单响应动态复制到另一张工作表时调整范围参考,请从第 1 行开始复制,如下所示:

={ 'Form Responses 1'!A1:A }

或者,使用数组公式,如下所示:

=arrayformula( 
  if( 
    row('Form Responses 1'!A1:A) = 1, 
    "Enter column header here", 
    'Form Responses 1'!A1:A 
  ) 
)

处理表单响应的更好方法是使用query()函数将数据直接聚合到您需要的任何报告中。


推荐阅读