为Google SpreadSheets中的列生成所有可能的组合

JPa*_*shs 15 google-sheets

我有一个包含A,B和C三列的Google SpreadSheets文档.

我需要使用列A和B中值的所有可能组合填充列C.请查看捕获以查看我的意思.

我发现这在Excel中完成的,在这里,但它并没有在谷歌电子表格的工作.

该公式即使对于更多列也应该有用(例如:四个而不是两个)

我可以这样做吗?

在此输入图像描述

pla*_*er0 47

在大流行后的新世界中,我们可以通过以下方式解决这个问题:

=INDEX(FLATTEN(A2:A3&" "&TRANSPOSE(B2:B4)))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

为了考虑到未来的扩展,我们可以这样做:

=INDEX(FLATTEN(FILTER(A2:A; A2:A<>"")&" "&TRANSPOSE(FILTER(B2:B; B2:B<>""))))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

对于 3 列:

=INDEX(FLATTEN(FLATTEN(
 FILTER(A2:A; A2:A<>"")&" "&TRANSPOSE(
 FILTER(B2:B; B2:B<>"")))&" "&TRANSPOSE(
 FILTER(C2:C; C2:C<>""))))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

4 列:

=INDEX(FLATTEN(FLATTEN(FLATTEN(
 FILTER(A2:A; A2:A<>"")&" "&TRANSPOSE(
 FILTER(B2:B; B2:B<>"")))&" "&TRANSPOSE(
 FILTER(C2:C; C2:C<>"")))&" "&TRANSPOSE(
 FILTER(D2:D; D2:D<>""))))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述



有关更多信息,请参阅:/sf/answers/5191249801/



  • 惊人的!要将它们打印在单独的列中而不是一列中,请按照此处的示例操作: =ArrayFormula(split(flatten(transpose(filter(B2:B; B2:B &lt;&gt; "")) &amp; "," &amp; (flatten(filter(C2) :C; C2:C &lt;&gt; "") &amp; "," &amp; transpose(filter(D2:D; D2:D &lt;&gt; ""))))); ",")) https://support.google. com/docs/thread/61770165/create-automatically-all-combinations-of-multiple-columns-each-one-of- different-size?hl=en (2认同)

Max*_*rov 14

更新201810

原始公式崩溃的大数据集.我描述了一种在这里使用任何大小的数据进行交叉连接的方法.


尝试配方: =ArrayFormula(transpose(split(rept(concatenate(A2:A&char(9)),counta(B2:B)),char(9))) &" "&transpose(split(concatenate(rept(B2:B&char(9),counta(A2:A))),char(9))))

结果:

car red
train red
car yellow
train yellow
car blue
train blue
Run Code Online (Sandbox Code Playgroud)

您可以再次使用它来添加另一个列表: 在此输入图像描述

式是在细胞C2E2,

C2 是:

=ArrayFormula(transpose(split(rept(concatenate(A2:A&char(9)),counta(B2:B)),char(9)))&" "&transpose(split(concatenate(rept(B2:B&char(9),counta(A2:A))),char(9))) )
Run Code Online (Sandbox Code Playgroud)

E2是:

=ArrayFormula(transpose(split(rept(concatenate(C2:C&char(9)),counta(D2:D)),char(9)))&" "&transpose(split(concatenate(rept(D2:D&char(9),counta(C2:C))),char(9))) )
Run Code Online (Sandbox Code Playgroud)

  • 您必须在公式中用分号`;` 替换逗号。这是区域设置。我将文件设置区域更改为美国并且它起作用了。 (2认同)

z..*_*z.. 5

现在我们有了LAMBDALambda 辅助函数,我们可以使用以下方法很好地解决这个问题REDUCE

\n
=ARRAYFORMULA(\n   LET(range,A2:C,\n       SPLIT(\n         REDUCE(,\n           SEQUENCE(COLUMNS(range)),\n           LAMBDA(acc,i,\n             TOCOL(acc&"\xce\xb6"&TOROW(INDEX(range,,i),3)))),\n         "\xce\xb6")))\n
Run Code Online (Sandbox Code Playgroud)\n

在此输入图像描述

\n