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

如何通过Excel 365公式获取两个集合的Cartesian product(交叉连接)

Excel 365 单公式生成两个集合的笛卡尔积

通用公式

针对任意列数、任意内容的两个集合,直接用以下公式即可生成笛卡尔积,只需替换公式中的range1和range2为你的两个集合的单元格范围:

=HSTACK(INDEX(range1,ROUNDUP(SEQUENCE(ROWS(range1)*ROWS(range2))/ROWS(range2),0),SEQUENCE(,COLUMNS(range1))),INDEX(range2,MOD(SEQUENCE(ROWS(range1)*ROWS(range2))-1,ROWS(range2))+1,SEQUENCE(,COLUMNS(range2))))

公式原理拆解

  • 总行数计算:ROWS(range1)*ROWS(range2)得到笛卡尔积的总行数,也就是两个集合行数的乘积。
  • 行索引定位:
    • ROUNDUP(SEQUENCE(...)/ROWS(range2),0):让第一个集合的每一行重复ROWS(range2)次,比如第一个集合有3行、第二个有3行,第一个集合的第1行会对应结果的前3行。
    • MOD(SEQUENCE(...)-1,ROWS(range2))+1:让第二个集合的行循环遍历,比如第二个集合有3行,会按1→2→3→1→2→3...的顺序重复ROWS(range1)次。
  • 提取整行内容:INDEX函数配合SEQUENCE(,COLUMNS(rangeX)),可以一次性取出集合中对应行的所有列,不用单独指定每一列。
  • 横向拼接:HSTACK把两个集合的结果横向合并,得到完整的笛卡尔积结构。

针对你的例子的实际用法

假设你的第一个集合是A1:B3(左侧两列),第二个集合是D1:E3(右侧两列),代入公式后:

=HSTACK(INDEX(A1:B3,ROUNDUP(SEQUENCE(ROWS(A1:B3)*ROWS(D1:E3))/ROWS(D1:E3),0),SEQUENCE(,COLUMNS(A1:B3))),INDEX(D1:E3,MOD(SEQUENCE(ROWS(A1:B3)*ROWS(D1:E3))-1,ROWS(D1:E3))+1,SEQUENCE(,COLUMNS(D1:E3))))

输入后Excel会自动溢出9行结果,每行对应两个集合的一组组合,完全符合笛卡尔积的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 05:02:23