为列生成所有可能的组合(交叉连接或笛卡尔积)

Generate all possible combinations for Columns(cross join or Cartesian product)

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

我需要用 A 列和 B 列中值的所有可能组合填充 C 列。请看一下捕获以了解我的意思。

我发现这可以在 Excel、here 中完成,但它在 google 电子表格中不起作用。

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

我可以这样做吗?

更新201810

大型数据集的原始公式崩溃。我描述了一种使用任意大小的数据进行交叉连接的方法 here.


尝试公式:

=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

您可以再次使用它来添加另一个列表:

公式位于 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))) )

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))) )

在 post-pandemic new world 我们可以解决这个问题:

=INDEX(FLATTEN(A2:A3&" "&TRANSPOSE(B2:B4)))

考虑到未来的扩展,我们可以做:

=INDEX(FLATTEN(FILTER(A2:A; A2:A<>"")&" "&TRANSPOSE(FILTER(B2:B; B2:B<>""))))

3 列:

=INDEX(FLATTEN(FLATTEN(
 FILTER(A2:A; A2:A<>"")&" "&TRANSPOSE(
 FILTER(B2:B; B2:B<>"")))&" "&TRANSPOSE(
 FILTER(C2:C; C2:C<>""))))

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<>""))))