如何按指定个数在Excel中获得一列数据的所有可能组合?
发布时间:2022-12-24 09:04:29
Q:数据放置在列A中,我要得到这些数据中任意3个数据的所有可能组合。如下图1所示,列A中存放了5个数据,要得到这5个数据中任意3个数据的所有可能组合,如列B中所示。如何实现?
图1
(注:这是无意中看到的一个问题,我觉得程序编写得很巧妙,使用了递归的方法来解决,非常简洁,特将该解答稍作整理后辑录于此与大家分享!)
A:VBA代码如下:
Sub Combinations()
Dim rng As Range
Dim n AsLong
Dim vElements As Variant
Dim lRow As Long
Dim vResult As Variant
‘要组合的数据在当前工作表的列A
Set rng =Range(“A1”, Range(“A1”).End(xlDown))
‘设置每个组合需要的数据个数
n = 3
‘在数组中存储要组合的数据
vElements =Application.Index(Application.Transpose(rng), 1, 0)
‘重定义进行组合的数组大小
ReDim vResult(1 To n)
Call CombinationsREC(vElements, CInt(n), vResult, lRow, 1, 1)
End Sub
Sub CombinationsREC(vElements As Variant, _
p As Integer,_
vResult AsVariant, _
lRow As Long,_
iElement AsInteger, _
iIndex AsInteger)
Dim i AsInteger
For i =iElement To UBound(vElements)
vResult(iIndex)= vElements(i)
IfiIndex = p Then
lRow = lRow + 1
Range(“B” & lRow) = Join(vResult, “, “)
‘每组组合放置在多列中
Range(“C” &lRow).Resize(, p) = vResult
Else
‘递归调用
Call CombinationsREC(vElements, p, vResult, lRow, i + 1, iIndex + 1)
End If
Next i
End Sub
代码的关键在于递归调用的实现,有兴趣的朋友可以使用F8键逐语句运行代码观察代码效果,来理解实现过程。
代码的图片版如下:
如果将代码中注释掉的代码恢复,也就是将组合结果放置在多列中,运行后的结果如下图2所示。


猜你喜欢
- 如何在天眼查中编辑信息?天眼查是一款 "都能用的商业安全工具",实现了企业信息、企业发展、司法风险等数据维度查询。想要在
- 有不少用户在还原Win7系统的时候会收到提示“更新失败还原更改”的情况,那么遇到这种情况应该如何却解决呢?下面就和小编一起来看看是如何解决的
- 1、首先我们先输入文字,选定文字,点击开始==然后点击“中文版式”在下拉中选择“双行合一”; 2、在弹出的对话框中
- 有网友想在查看文件夹的时候能第一时间找到自己常用的一些文件夹内容,因此想要调整磁盘中的文件夹顺序。那么win10文件夹怎么随意排序?下面小编
- 一Win7系统用户跟往常一样将电脑开机,却出现系统无法启动的故障,黑屏上还提示:Windows could not start becaus
- Win10可以说有非常多的人在使用,然而不少使用win10电脑的小伙伴突然发现自己的屏幕显示的颜色有点不正常,那么碰到这个问题应该如何去解决
- 光标浏览对那些老年人很有帮助,可以不使用鼠标,而使用键盘上的标准导航键(Home End PgUp PgDn 和方向键)来选择文本并在网页上
- 如果在Mac上使用传统的压缩文件会遇到各种各样的问题不能精准解压!非要先提取才能预览文档……对大型文档束手无策!密码保护?那是什么东东?更别
- Google Earth是一款虚拟的地球仪软件,如果安装了Google Earth,我们就可以浏览全球各地的高清晰卫星图片。Wiin10作为
- 我们电脑正常使用的情况下,突然发现开不了机了,那这种问题可能是遇上了系统损坏的情况,系统损坏分为硬件损坏和软件损坏两方面,出现这种情况需要我
- 接下来,就给给位分享下面制作双向条形图的方法具体制作过程:①启动Excel2007,简单的制作出数据表格,D列做为辅助列,数据的C列的相反数
- 最近有用户反映不知道Win10系统的电脑怎么设置开关机,定时开关机非常方便,尤其是适用于电脑正在下载或者更新系统的时候,可以带来很大的便利,
- 美图秀秀怎么抠图放在另一个图?美图秀秀是一款非常受用户欢迎的修图软件,使用美图秀秀可以对图片进行美化和编辑,那么美图秀秀怎么抠图放在另一个图
- 在XP系统的ghost xp网络组件列表里,有一个Internet 协议,Internet 协议又称为TCP或IP,当它被破坏时如何重置呢?
- Word2007是我们常用的文本编辑工具,为了保护隐私,常常会给word加密,那么具体要怎么设置?下面小编一word2007为例教你怎么在w
- 其实我们的常用的word的功能是很强大的,今天小编就为大家介绍在word文档中怎么制作一个证书方法,一起来看看吧这里制作证书可不是说的什么假
- 在使用电脑的时候一般都会用到文件资源管理器,就有用户咨询小编怎么清除文件资源管理器中的搜索记录。那针对这个问题,小编就给大家整理了清除电脑文
- 有时在单元格输入数据或公式后,输入后的数据或公式计算结果变成连续排列的井号(#),即 #####。可能的错误原因一原因:单元格的宽度不足以显
- 如果我我们在使用excel表格进行资料处理的话,对于一些情况可能有的小伙伴会想excel单元格内换行后内容会改变吗。对于这个问题小编觉得单元
- 我们在使用XP系统的过程中,会遇到系统崩溃的问题,给用户带来不小的麻烦,今天小编介绍有效防止XP系统中崩溃的一些经验,大家一起来学习下吧,具