|
本帖最后由 世界客都 于 2024-7-1 22:28 编辑
前 言
书写本文时未参考论坛或网络上任何一篇文章,如有雷同,纯属巧合。
我最近看到有一些论坛朋友求助提取不重复组合元素,我就想了一会儿,把自己的辅助列解法发出来。我的方法其实非常简单,只要你会使用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))
下拉至最后一行。
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))
右拉,然后鼠标左键双击,公式填充至最后一行。
第四步:
在K1:O1287单元格输入:=INDEX(A:A,E1:I1287)
按CTRL+SHIFT+ENTER
即可。
大功告成。
有些朋友可能会说了,你这个步骤也挺多。我想说:不多不多,你理解一下以上几个步骤,你会发现,这很自然,哪怕过了很多年了,你回想一下这个思路,你都能很快通过辅助列写出来。
真的。
还有1个附件,数据是比较多的,供大家继续测试并学习。
13选5,1287种组合提取——流畅.zip
(77.64 KB, 下载次数: 23)
20选5,15504种组合提取——流畅.zip
(1.07 MB, 下载次数: 14)
|
评分
-
11
查看全部评分
-
|