如何用Excel基础函数生成多列唯一值的笛卡尔积组合表?
用Excel基础函数生成多列唯一值的全组合(笛卡尔积)
步骤1:提取各列的非空唯一值
先把源数据中每列的非空唯一值单独提取到空白区域,方便后续引用:
假设源数据位于A1:D4(表头A1:D1,数据A2:D4):
- Excel 365/2021及以上版本:用
UNIQUE函数快速提取- 列1唯一值:在F2输入
=UNIQUE(A2:A4),自动返回a1,a2,a3 - 列2唯一值:在G2输入
=UNIQUE(B2:B4,TRUE)(第二个参数TRUE忽略空值),返回b1,b2 - 列3唯一值:在H2输入
=UNIQUE(C2:C4,TRUE),返回c1,c2 - 列4唯一值:在I2输入
=UNIQUE(D2:D4,TRUE),返回d1,d2
- 列1唯一值:在F2输入
- 旧版Excel(无UNIQUE函数):用数组公式提取
- 列1唯一值:在F2输入
=INDEX(A:A, SMALL(IF(MATCH(A$2:A$4,A$2:A$4,0)=ROW(A$2:A$4)-ROW(A$2)+1,ROW(A$2:A$4),""),ROWS(F$2:F2))),按Ctrl+Shift+Enter完成输入,下拉直到出现#NUM!后删除错误行 - 其他列同理,将公式中的A列替换为对应列(B、C、D)即可
- 列1唯一值:在F2输入
步骤2:用基础函数生成全组合
在空白区域(比如A7:D7设为新表头,A8开始放结果)输入以下公式,然后下拉到第31行(总组合数为3×2×2×2=24条,A8到A31共24行):
- A8(对应column1):
=INDEX($F$2:$F$4, INT((ROW()-8)/(COUNTA($G$2:$G$3)*COUNTA($H$2:$H$3)*COUNTA($I$2:$I$3)))+1) - B8(对应column2):
=INDEX($G$2:$G$3, INT(MOD((ROW()-8), COUNTA($G$2:$G$3)*COUNTA($H$2:$H$3)*COUNTA($I$2:$I$3))/(COUNTA($H$2:$H$3)*COUNTA($I$2:$I$3)))+1) - C8(对应column3):
=INDEX($H$2:$H$3, INT(MOD((ROW()-8), COUNTA($H$2:$H$3)*COUNTA($I$2:$I$3))/COUNTA($I$2:$I$3))+1) - D8(对应column4):
=INDEX($I$2:$I$3, MOD((ROW()-8), COUNTA($I$2:$I$3))+1)
公式说明:
COUNTA统计对应列唯一值的数量,无需手动输入固定数字,适配值数量变化ROW()-8计算当前行相对于结果起始行的偏移量(若起始行不是8,替换为对应行号即可)INT与MOD配合实现对各列唯一值的循环遍历,自动生成所有可能的组合
完成后即可得到你需要的全组合表格,全程无需手动复制粘贴。
内容的提问来源于stack exchange,提问作者jaceinthehole
相关产品推荐
相关产品推荐

