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

如何在Excel中实现无关联数据的两个表的全连接(笛卡尔积)

在Excel中高效生成两个无关联表格的笛卡尔积

以下是几种高效实现的方法,可根据数据量和使用场景选择:

方法1:Power Query(推荐,适合大数据量)

Power Query是Excel内置工具,无需公式或代码,操作直观且性能出色:

  • 分别将两个数据源转为Excel表:选中数据区域,按Ctrl+T,勾选「我的表格有标题」,假设两个表命名为Table1(含name列)和Table2(含number列)
  • 点击「数据」选项卡 → 「从表格/范围」,选择任意一个表进入Power Query编辑器
  • 在编辑器中,点击「添加列」→ 「自定义列」,输入公式 =Table2,点击确定
  • 点击新生成列右侧的展开按钮(双向箭头),选择展开所有列
  • 点击「关闭并上载」,结果会自动导入新工作表,包含所有name与number的组合

方法2:数组公式(适合小数据量)

如果数据量不大,用数组公式可快速生成结果:
假设name数据在A2:A4,number数据在C2:C4:

  1. 在E2单元格输入公式:
    =INDEX($A$2:$A$4,INT((ROW(E2)-2)/COUNTA($C$2:$C$4))+1)
    
  2. 在F2单元格输入公式:
    =INDEX($C$2:$C$4,MOD(ROW(F2)-2,COUNTA($C$2:$C$4))+1)
    
  3. 同时选中E2:F2,下拉填充直到出现错误值,即可得到所有组合

方法3:VBA宏(适合重复批量操作)

如果需要频繁生成笛卡尔积,可编写VBA宏一键完成:

Sub GenerateCartesianProduct()
    Dim wsName As Worksheet, wsNum As Worksheet, wsOutput As Worksheet
    Dim lastRowName As Long, lastRowNum As Long
    Dim i As Long, j As Long, outputRow As Long
    
    ' 替换为你的工作表名称
    Set wsName = ThisWorkbook.Sheets("Sheet1")
    Set wsNum = ThisWorkbook.Sheets("Sheet2")
    Set wsOutput = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    
    lastRowName = wsName.Cells(wsName.Rows.Count, "A").End(xlUp).Row
    lastRowNum = wsNum.Cells(wsNum.Rows.Count, "C").End(xlUp).Row
    
    ' 写入表头
    wsOutput.Cells(1, 1) = "name"
    wsOutput.Cells(1, 2) = "number"
    
    outputRow = 2
    ' 循环生成所有组合
    For i = 2 To lastRowName
        For j = 2 To lastRowNum
            wsOutput.Cells(outputRow, 1) = wsName.Cells(i, "A").Value
            wsOutput.Cells(outputRow, 2) = wsNum.Cells(j, "C").Value
            outputRow = outputRow + 1
        Next j
    Next i
End Sub

使用说明:修改代码中的工作表名称和列号,按Alt+F11打开VBA编辑器,插入模块粘贴代码,运行宏即可生成结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:01:05