求生成Single-A与Double-A合规状态全排列组合的表格公式
实现两类状态排列的笛卡尔积(自动生成全组合)
假设你的数据结构如下:
- Single-A 数据(25列,351行)存放在
Sheet1的A1:Y351(第一行为表头,数据从第二行开始) - Double-A 数据(12列,91行)存放在
Sheet2的A1:L91(第一行为表头,数据从第二行开始)
以下是不同表格工具的实现方案:
方案1:Excel 365/2021 或 Google Sheets(动态数组版本)
利用动态数组函数自动生成所有组合,无需手动下拉填充:
生成Single-A的重复行(Sheet3的A-Y列)
在Sheet3的A2单元格输入公式,横向拖动到Y列:
=INDEX(Sheet1!$A:$Y, INT((SEQUENCE(351*91,1,0)/91))+1, COLUMN(A:A))
原理:通过SEQUENCE生成32041行的序列,INT((行号/91))+1让Single-A的每一行重复91次,对应Double-A的所有行。
生成Double-A的循环行(Sheet3的Z-AO列)
在Sheet3的Z2单元格输入公式,横向拖动到AO列:
=INDEX(Sheet2!$A:$L, MOD(SEQUENCE(351*91,1,0),91)+1, COLUMN(A:A))
原理:MOD(行号,91)+1让Double-A的行从1到91循环351次,和Single-A的每一行一一配对。
灵活适配行数(无需手动输入351/91)
如果后续行数有变动,用COUNTA自动获取数据行数:
# Single-A列公式 =INDEX(Sheet1!$A:$Y, INT((SEQUENCE(COUNTA(Sheet1!A:A)*COUNTA(Sheet2!A:A),1,0)/COUNTA(Sheet2!A:A)))+1, COLUMN(A:A)) # Double-A列公式 =INDEX(Sheet2!$A:$L, MOD(SEQUENCE(COUNTA(Sheet1!A:A)*COUNTA(Sheet2!A:A),1,0),COUNTA(Sheet2!A:A))+1, COLUMN(A:A))
方案2:旧版Excel(非动态数组版本)
对于不支持动态数组的Excel版本,用ROW和MOD实现:
生成Single-A的重复行(Sheet3的A-Y列)
在Sheet3的A2单元格输入公式,横向拖动到Y列后,下拉到32041行:
=INDEX(Sheet1!$A:$Y, INT((ROW()-2)/91)+2, COLUMN(A:A))
(注:公式中ROW()-2是因为数据从第二行开始,若表头在第一行,数据从第二行起,需对应调整偏移量)
生成Double-A的循环行(Sheet3的Z-AO列)
在Sheet3的Z2单元格输入公式,横向拖动到AO列后,下拉到32041行:
=INDEX(Sheet2!$A:$L, MOD(ROW()-2,91)+2, COLUMN(A:A))
验证方法
- 第91行:对应Single-A第1行 + Double-A第91行
- 第92行:对应Single-A第2行 + Double-A第1行
- 第32041行:对应Single-A第351行 + Double-A第91行
内容的提问来源于stack exchange,提问作者chdleoj
相关产品推荐
相关产品推荐

