You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改公式以同时生成行列数据的所有组合?

修改公式同时生成跨列组合与行内/单列组合

针对你的需求,以下提供几种不同场景的修改方案,你可以根据实际需要选择:

原公式作用回顾

你当前的公式通过笛卡尔积生成了B、C、D列非空值的跨列组合(例如 B2 C3 D4 这类来自不同列的单个值组合)。


方案1:新增「单列所有非空值的完整串联」

如果需要加入的是每个列所有行值的完整组合(例如 B2 B3 B4、C2 C3 C4、D2 D3 D4),使用以下公式:

=INDEX(FLATTEN({
  // 保留原有跨列笛卡尔积组合
  FLATTEN(FLATTEN(FILTER(B2:B,B2:B<>"")&" "&TRANSPOSE(FILTER(C2:C,C2:C<>"")))&" "&TRANSPOSE(FILTER(D2:D,D2:D<>""))),
  // 新增单列所有行值的完整串联
  TEXTJOIN(" ",TRUE,FILTER(B2:B,B2:B<>"")),
  TEXTJOIN(" ",TRUE,FILTER(C2:C,C2:C<>"")),
  TEXTJOIN(" ",TRUE,FILTER(D2:D,D2:D<>""))
}))

方案2:新增「单列内所有非空值的子集组合」

如果需要加入的是每个列内部所有可能的行值子集组合(例如B列的 B2、B3、B2 B3、B2 B3 B4 等所有子集),使用以下公式:

=INDEX(FLATTEN({
  // 保留原有跨列笛卡尔积组合
  FLATTEN(FLATTEN(FILTER(B2:B,B2:B<>"")&" "&TRANSPOSE(FILTER(C2:C,C2:C<>"")))&" "&TRANSPOSE(FILTER(D2:D,D2:D<>""))),
  // 生成B列所有子集组合
  BYROW(SEQUENCE(2^COUNTA(FILTER(B2:B,B2:B<>""))-1),LAMBDA(x,TEXTJOIN(" ",TRUE,FILTER(FILTER(B2:B,B2:B<>""),BITAND(SEQUENCE(COUNTA(FILTER(B2:B,B2:B<>""))),x)>0)))),
  // 生成C列所有子集组合
  BYROW(SEQUENCE(2^COUNTA(FILTER(C2:C,C2:C<>""))-1),LAMBDA(x,TEXTJOIN(" ",TRUE,FILTER(FILTER(C2:C,C2:C<>""),BITAND(SEQUENCE(COUNTA(FILTER(C2:C,C2:C<>""))),x)>0)))),
  // 生成D列所有子集组合
  BYROW(SEQUENCE(2^COUNTA(FILTER(D2:D,D2:D<>""))-1),LAMBDA(x,TEXTJOIN(" ",TRUE,FILTER(FILTER(D2:D,D2:D<>""),BITAND(SEQUENCE(COUNTA(FILTER(D2:D,D2:D<>""))),x)>0))))
}))

方案3:新增「同行的列值组合」

注:原公式的笛卡尔积已经包含这类组合(例如 B2 C2 D2),但如果需要单独提取或确保同行组合被完整列出,使用以下公式:

=INDEX(FLATTEN({
  // 保留原有跨列笛卡尔积组合
  FLATTEN(FLATTEN(FILTER(B2:B,B2:B<>"")&" "&TRANSPOSE(FILTER(C2:C,C2:C<>"")))&" "&TRANSPOSE(FILTER(D2:D,D2:D<>""))),
  // 新增同行列值组合
  FILTER(B2:B&" "&C2:C&" "&D2:D,B2:B<>""*C2:C<>""*D2:D<>"")
}))

内容的提问来源于stack exchange,提问作者Capz65

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 14:57:46