如何在谷歌电子表格中联合范围

时间:2012-05-29 05:03:32

标签: google-apps-script google-sheets

我希望联合任何Google电子表格中的范围。

示例

Sheet 1中A:

{12, 131, 45}

Sheet 2中A:

{12, 131, 46}

未知功能

=formula_for_union_range(Sheet1!A:A; Sheet2!:A:A)

应该返回

{12, 131, 45, 12, 131, 46}

问题

怎么可能?

7 个答案:

答案 0 :(得分:57)

您可以将它们合并为1列,然后获取唯一值。 检查以下公式:

# store all the content of directory into array
cd directory && arr=(*) && cd -

# first entry in array
h1="${arr[0]:0:4}"

# last entry in array
t1="${arr[-1]:0:4}"

答案 1 :(得分:41)

只需使用:

\\n

答案 2 :(得分:21)

尽管脚本可以轻松完成此操作,但我建议使用常规电子表格公式,例如

=transpose(split(join(";";Sheet1!A:A)&";"&join(";";Sheet2!A:A);";"))

要删除重复项,只需将其包装在unique公式中:

=unique(transpose(...))

并排序...... =sort(...)

答案 3 :(得分:10)

Google Apps脚本

然而问题是关于脚本。我仍然成功使用以下代码:

function unionRanges(e) {
  var result = [];
  var length = 0;
  var i = 0;
  try {
    for (i = 0; i < arguments.length; i++)
      length += arguments[i].length;
    if (length > 3000) return '#BIGRANGE';
    for (var i = 0; i < arguments.length; i++)
      result = result.concat(arguments[i].filter(function (el) {
        return el.join('').length > 0
      }));
    return result;
  } catch (err) {
    return JSON.stringify(err);
  }
}

电子表格功能

但是,如上所述,使用{} - 表示法更容易。

垂直连接

={Range(Cols=N);Range(Cols=N)}

横向连接

={Range(Row=M),Range(Rows=M)}

可以组合

={{,,};{,,}}

或者更难的事情

={{;;},{;;}};{{;;},{;;}};{{;;},{;;}}

参数分隔符的区域设置依赖关系

如果您当前的区域设置支持,作为参数分隔符,则应使用;进行垂直连接,使用,进行水平连接。

否则您的参数分隔符为;,您必须分别使用;\(不含空格)。

工作表'Data 1'!A1:C20

|   Name  |    Date   | Sum |
| Ethan   |  3/4/2017 |  31 |
| Logan   |  3/6/2017 |  62 |
| Brian   | 3/26/2017 |  61 |
|   ...   |     ...   | ... |

工作表'Data 2'!A1:C20

|  Name   |    Date   | Sum |
| Nathan  | 3/30/2017 |  53 |
| Alyssa  | 3/13/2017 |  72 |
| John    | 3/24/2017 |  79 |
| Megan   | 3/16/2017 |  10 |
|   ...   |     ...   | ... |

级联

垂直连接

={'Data 1'!A1:C20;'Data 2'!A2:C20}
结果
|  Name  |    Date   | Sum |
| Ethan  |  3/4/2017 |  31 |
| Logan  |  3/6/2017 |  62 |
| Brian  | 3/26/2017 |  61 |
| ...    |       ... | ... |
| Nathan | 3/30/2017 |  53 |
| Alyssa | 3/13/2017 |  72 |
| John   | 3/24/2017 |  79 |
| ...    |       ... | ... |

水平串联

={TRANSPOSE('Data 1'!A1:C20),TRANSPOSE('Data 2'!A2:C20)}
结果
| Name |   Ethan  |   Logan  |   Brian   | ... |   Nathan  |   Alyssa  |    John   |
| Date | 3/4/2017 | 3/6/2017 | 3/26/2017 | ... | 3/30/2017 | 3/13/2017 | 3/24/2017 |
| Sum  |       31 |       62 |        61 | ... |        53 |        72 |        79 |

有关此Mr.Reboot

的更多信息

答案 4 :(得分:0)

如果要合并工作表并排除具有空单元格的行,请在公式中使用FILTER函数:

=FILTER({Sheet1!A:A;Sheet2!A:A}, {Sheet1!A:A;Sheet2!A:A}<>"")

答案 5 :(得分:0)

假设您有:

   A    B   C   D   E   F
1: 1    2   3   4   5   6

可以将切片连接为行或列。

对于其他列(同一行),请使用逗号。 ={$A1:$C1,$D1:$F1}产生:

1   2   3   4   5   6

对于其他行(相同列),请使用分号。 ={$A1:$C1;$D1:$F1}产生:

1   2   3
4   5   6

答案 6 :(得分:0)

起初当我尝试 ={Sheet1!A:A; Sheet2!A:A} 时,我认为它不起作用,因为我只能看到第一张纸的结果。原来它也包括所有的空白单元格!

要过滤空白和空单元格,同时保留重复项(与 =UNIQUE 不同)并且不重复自己(与 =FILTER() 不同),您可以使用 =QUERY(),如下所示:

=QUERY(
  {March!A1:Z; April!A2:Z; May!A2:Z}, 
  "select * where Col1 != '' and Col1 is not null", 
  0)

(请注意,我包含了第一张工作表中的标题行,并从其他工作表中省略了它)。

如果您的工作表不包含带有空文本的单元格,您可以省略 Col1 != '' and