如何通过Excel查询生成A1:A6中6个数字取3个的所有组合(非排列)
生成Excel中6个数字取3个的所有非排列组合方案
以下是三种适配不同Excel版本的实用解决方案:
方法一:Excel 365/2021 动态数组公式
在空白单元格(如B1)直接输入以下公式,回车后会自动溢出所有组合:
=LET( data, A1:A6, n, COUNTA(data), k, 3, total, COMBIN(n, k), seq, SEQUENCE(total), first, INDEX(data, ROUNDUP((seq-1)*k/(n*(n-1)*(n-2))*(n-k+1),0)), second, INDEX(data, ROUNDUP((MOD((seq-1)*(n-1), n*(n-1)))/(n-1)+1,0)+(first<=INDEX(data, ROUNDUP((MOD((seq-1)*(n-1), n*(n-1)))/(n-1)+1,0)))*1), third, INDEX(data, ROUNDUP(MOD((seq-1)*(n-1)*(n-2), n*(n-1)*(n-2))/((n-1)*(n-2))+1,0)+(first<=INDEX(data, ROUNDUP(MOD((seq-1)*(n-1)*(n-2), n*(n-1)*(n-2))/((n-1)*(n-2))+1,0)))*1+(second<=INDEX(data, ROUNDUP(MOD((seq-1)*(n-1)*(n-2), n*(n-1)*(n-2))/((n-1)*(n-2))+1,0)))*1), CHOOSE({1,2,3}, first, second, third) )
公式通过LET封装变量,自动计算并生成所有不重复的3元组合,无需手动下拉填充。
方法二:Power Query(全Excel版本适用)
- 选中A1:A6区域,点击数据选项卡 → 从表格/区域(旧版Excel选自表格),确认后进入Power Query编辑器。
- 点击添加列 → 自定义列,输入以下M语言代码:
= List.Combinations(Table.Column(#"更改的类型", "列1"), 3)
(若你的列名不是“列1”,替换为实际列名)
3. 选中生成的新列,点击转换 → 展开 → 到新列,将组合拆分为三列。
4. 点击关闭并上载,结果会导入到新工作表。
方法三:旧版Excel 嵌套公式(无动态数组)
从B1开始,分别在B1、C1、D1输入以下公式,下拉填充直到出现错误值:
- B1:
=INDEX($A$1:$A$6,INT((ROW(A1)-1)/COMBIN(5,2))+1) - C1:
=INDEX($A$1:$A$6,INT((MOD(ROW(A1)-1,COMBIN(5,2)))/COMBIN(4,1))+INT((ROW(A1)-1)/COMBIN(5,2))+2) - D1:
=INDEX($A$1:$A$6,MOD(MOD(ROW(A1)-1,COMBIN(5,2)),COMBIN(4,1))+INT((MOD(ROW(A1)-1,COMBIN(5,2)))/COMBIN(4,1))+INT((ROW(A1)-1)/COMBIN(5,2))+3)
有效组合会自动显示,错误值代表组合已全部生成。
内容的提问来源于stack exchange,提问作者Dinuka W
相关产品推荐
相关产品推荐

