将多个列堆叠到一个?

abr*_*tez 43 google-sheets

我正在使用Google SpreadSheet,而我正在尝试使用包含单词列表的多个工作表.在最后一页上,我想创建一个汇总列表,它是列中所有值的组合.我使用= CONCATENATE()进行排序工作,但是它把它变成了一个字符串.有什么方法可以将它保留为列列表?

以下是列的示例:

工作表Sheet1

  • 苹果
  • 橙子
  • 香蕉

Sheet2中

  • 菠萝
  • 草莓
  • 桃子

FinalSheet

  • 苹果
  • 橙子
  • 香蕉
  • 菠萝
  • 草莓
  • 桃子

Lak*_*ake 72

更新的答案

我就在那里一个更好的解决方案.它已被发布在下面,但我在这里复制它,所以它在最佳答案:

=unique({A:A;B:B})
Run Code Online (Sandbox Code Playgroud)

警告:在某些情况下,这将包括一个空白单元格(例如,如果在第一个列表的末尾有一个空白单元格).

如果你不关心订购和拖尾空白单元,一个简单的sort()将清理:

=sort(unique({A:A;B:B}))
Run Code Online (Sandbox Code Playgroud)

否则,filter()可以删除空白,如下所示:

=filter(unique({A:A;B:B}),NOT(ISBLANK(unique({A:A;B:B}))))
Run Code Online (Sandbox Code Playgroud)

以下是旧的弃用答案

我确信这是"错误的做法",因为这看起来是一个非常简单和常见的任务,我觉得我必须错过一些东西,因为它不应该需要这样一个过度的解决方案.

但这有效:

=UNIQUE(TRANSPOSE(SPLIT(JOIN(";",A:A,B:B),";")))
Run Code Online (Sandbox Code Playgroud)

如果您的数据包含任何';' 您自然需要更改分隔符的字符.

  • 谢谢!它花了很多时间才发现这个! (3认同)
  • 当我尝试使用unique时,它会将数据放入单独的列中,而不是以任何方式合并它们,这完全违背了这一点."弃用"的答案有效:/ (3认同)
  • 弃用的解决方案有效."更好"的解决方案产生了一个独特的_组合值.也就是说,它同时在A列和B列中找到唯一对.不推荐使用的方法是将列连接在一起,然后在不考虑配对的情况下查找唯一元素.当列不相邻时,"更好"的答案可能适用于某些人,例如在不同的纸张上等. (3认同)

Pow*_*tar 11

基本的方法,只是像这样的数组

={A1:A10;B1:B10...etc}
Run Code Online (Sandbox Code Playgroud)

我发现这个方法存在的问题是,如果你有很多列,那么它非常耗时.我做了一些搜索,发现了这篇文章:

将多个列连接到Google Spreadsheets中的一个已排序列中

核心公式是

=transpose(split(arrayformula(concatenate(if(len(A:Z)>0,A:Z&";",""))),";"))
Run Code Online (Sandbox Code Playgroud)

显然你要将A:Z替换为你想要使用的任何范围.如果你想做一些排序或删除重复项,你只需将上述公式包装在一个SORT()和/或UNIQUE()方法中,就像这样.

=sort(unique(transpose(split(arrayformula(concatenate(if(len(A:Z)>0,A:Z&";",""))),";"))))
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.大家快乐编码:)

  • 应该注意的是,这将所有值与 ; 连接起来。成一个大字符串,然后用 ; 分割它们。再次创建最终数组(=column)。如果任何单元格包含 ; 这将(巧妙地)中断。他们自己。如果是这种情况,请更改两次出现的 ; 在此片段中更改为不同的字符,例如 § 或 * 或您的数据中不存在的任何内容。如果你不这样做,会发生什么是像“a;b”这样的单元格在最后的大列中变成两个单独的单元格;“a”和“b”。这可能会导致微妙的错误:) (3认同)

小智 8

你可以用这个:

=unique({A1:A;B1:B})
Run Code Online (Sandbox Code Playgroud)

在这里工作完美!


The*_*ool 6

使用flatten,例如flatten(A1:B2)。更多详细信息请参阅本文

如果 2d 范围不是一个整体,则可以首先使用 & 符号或类似技术创建一个。然后可以在生成的 2d 范围上调用 flatten。下面的示例有点矫枉过正,但在处理动态二维范围时效果很好,因为基本解决方案无法轻松使用。

flatten(ARRAYFORMULA(SPLIT(ARRAYFORMULA(A1:A2&";"&C3:C4), ";")))
Run Code Online (Sandbox Code Playgroud)

本文还展示了如何使用查询中的子句(以及未记录的子句)轻松展开范围。skipping


cyr*_*ier 5

更简单:

={sheetone!A2:A;sheettwo!A2:A}
Run Code Online (Sandbox Code Playgroud)

  • 此公式还包括列中的所有空白单元格。 (2认同)

gra*_*yob 5

unique()函数消除了空格,但对我没有帮助,因为我重复了一些行。相反,我首先通过过滤列len()以删除空白单元格。然后,我以相同的方式将这些列合并在一起。

={filter(A:A, len(A:A)); filter(B:B, len(B:B))}


Guy*_*Guy -4

尝试使用您的 CONCATENATE 参数

=ArrayFormula(EXPAND(...))
Run Code Online (Sandbox Code Playgroud)