ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 283|回复: 5

[原创] 辅助列快速提取不重复组合元素

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-7-1 22:22 | 显示全部楼层 |阅读模式
本帖最后由 世界客都 于 2024-7-1 22:28 编辑

不重复组合.jpg


前 言
  书写本文时未参考论坛或网络上任何一篇文章,如有雷同,纯属巧合。
我最近看到有一些论坛朋友求助提取不重复组合元素,我就想了一会儿,把自己的辅助列解法发出来。我的方法其实非常简单,只要你会使用IF+MAX+INDEX这3个最简单的函数,你就能快速使用我这个方法,而且在10万数据左右生成都还是比较流畅的(我个人电脑是在18万行数据卡了2秒,我的电脑是办公室电脑,配置很低而且用了6年多了)。
一般来说,生成不重复组合元素最好的办法是VBA,简单快捷,当然复杂点的函数公式,PYTHON,PQ,JS等方法也是可以的。
  函数我所知道的,邵武(超人)版主写了一个365公式来生成不重复组合,他那个公式我看了,我完全看不懂,因为我本人的365还停留在很菜的水平。
  VBA我以前也会,但现在基本不会写了。要写,也得写很长时间。
  所以,以上说的就是新手或者初学者要生成不重复组合元素所遇到的一个问题,你把一个函数公式发给他,他不会改;你把VBA或者PQ,JS发给他,他也很难看懂,也不知道怎么改。
  所以,我把我的方法发出来,希望可以帮到这些朋友。


正 文
  大家先打开第一个附件,打开13选5,1287种组合提取那个表。
  下面我分4步走告诉大家如何快速提取不重复组合元素。
  请认真看好每一步的原理。
第一步:
先确定一下数据规模,例如,我要从13个元素中取5个元素,有多少种组合?用公式=COMBIN(13,5)得出1287种结果。
先在左上角的编辑框输入:
C1:C1287,然后按ENTER回车,输入=ROW(),按CTRL+ENTER,先快速生成一个1-1287的序列号,如C列所示。
这样做的目的是:输入公式,可以左键双击快速填充公式到最后一行。
第二步:
在D2单元格输入=MAX(IF(E1:I1<{9,10,11,12,13},E1:I1))
下拉至最后一行。
11.png
E1:I1,这里一共有5个数值(代表13取5的5),如果你是要取3个数值,那么公式就改为E1:G1,如果是要取8个数值,那么公式就改为E1:L1
{9,10,11,12,13}是这个意思:这里5个数值代表你要取5个数值,为什么是9-13呢?代表着一共有13个数值,从后往前取5个数值。
第三步:
在E1:I1单元格,分别输入1,2,3,4,5。这代表着13取5中最初的1种组合,然后在E2单元格输入:
=IF(E1<$D2,E1,IF(E1=$D2,E1+1,D2+1))
111.png
右拉,然后鼠标左键双击,公式填充至最后一行。
第四步:
在K1:O1287单元格输入:=INDEX(A:A,E1:I1287)
按CTRL+SHIFT+ENTER
即可。
大功告成。
1111.png
  有些朋友可能会说了,你这个步骤也挺多。我想说:不多不多,你理解一下以上几个步骤,你会发现,这很自然,哪怕过了很多年了,你回想一下这个思路,你都能很快通过辅助列写出来。
真的。
  还有1个附件,数据是比较多的,供大家继续测试并学习。

13选5,1287种组合提取——流畅.zip (77.64 KB, 下载次数: 23) 20选5,15504种组合提取——流畅.zip (1.07 MB, 下载次数: 14)

评分

11

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-7-2 12:09 | 显示全部楼层
点赞收藏后学些

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-7-2 14:23 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-7-21 16:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
如果元素是31个请问该怎么改。
另外如果是要算出8个一组怎么改。
谢谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-21 17:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
HYXGJ 发表于 2024-7-21 16:00
如果元素是31个请问该怎么改。
另外如果是要算出8个一组怎么改。
谢谢

C(31,8)=700多万
表格不适合,数据太多加上表格才104万行
建议选取其他工具。
*********************
我的这个方法只是适合几万行以下的规模

TA的精华主题

TA的得分主题

发表于 2024-7-21 17:28 | 显示全部楼层
世界客都 发表于 2024-7-21 17:13
C(31,8)=700多万
表格不适合,数据太多加上表格才104万行
建议选取其他工具。

如果20个元素    8个为一组呢
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-9-21 19:30 , Processed in 0.041667 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表