实现 Excel 多列数据组合

前言

因好朋友的工作要求需要在 Excel上实现 3种数据的排列组合,如果使用编程语言无非就是嵌套循环,而要在 Excel 实现没怎么实现过,在实现后觉得挺有意思的特此记录方便后续非工程师的人员可以方便实现该需求。

效果预览

![![在这里插入图片描述](https://img-blog.csdnimg.cn/e58a86d6a4cc496cbc9a1c6f650f17bd.png](https://img-blog.csdnimg.cn/586704f0bd8445db9f73ff38a6ca7b81.png

Excel函数须知

COUNTA()
用于解决统计某列非空单元格数目,常用的一般是 COUNT(),但是他无法处理非数字列的统计,本文用于计算集合的最大值。
举例 COUNTA(A:A),效果图中做了减 1的操作,所以显示为 3

INDEX()
在给定单元格区域中,返回特定的单元格值或者引用,本文用于赋值。
举例 INDEX(A:A, 2), 返回的结果就是 上海。

ROW()
返回一个引用的行号,本文用于实现遍历。

MOD()
返回两数相除的余数,本文用于实现递归循环。

实现说明

如效果图的结果来看

在 J列的函数公式:INDEX(A:A,(ROW(J2)-2)/($F$2 * $G$2) + 2)

步骤公式说明
0ROW(J2)-2因为需要过滤掉 表头,并且从 0 开始所以需要 - 2
1$F$2 * $G$2即产品名称和配件的组合数目,即循环次数, 2 * 5
2(ROW(J2)-2) / ($F$2 * $G$2)取整数进行分类汇总
3INDEX(A:A, (ROW(J2)-2) / ($F$2 * $G$2) + 2)在 A列范围内,而 + 2 则是确保正确取值过滤无意义数据,即A0,A1

如此实现,那 I列数据就会如下图成功遍历 30条有效数据(3 * 2 * 10)

K列的函数公式:=INDEX(B:B,MOD((ROW($J2)-2) / $G$2,$F$2) + 2)L列的函数公式:=INDEX(C:C,MOD(ROW($J2)-2)),$G$2) + 2)

上述公式一般都大同小异,需要注意是 K 列是 / $G$2,L列 没有 / (可以理解为 / 1),这就是对应的循环次数的不一致,从而实现程序上的嵌套循环。

想法

很有趣的体验,需了解循环次数防止异常,又要合理使用 $符号确保支持水平扩展,从实现复杂度来看非常简单,不过跟用程序实现,前者更具成就感。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值