如何按指定个数在Excel中获得一列数据的所有可能组合?

时间:2022-12-24 09:04:29 

Q数据放置在列A中,我要得到这些数据中任意3个数据的所有可能组合。如下图1所示,列A中存放了5个数据,要得到这5个数据中任意3个数据的所有可能组合,如列B中所示。如何实现?

如何按指定个数在Excel中获得一列数据的所有可能组合?

图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键逐语句运行代码观察代码效果,来理解实现过程。

代码的图片版如下:

如何按指定个数在Excel中获得一列数据的所有可能组合?

如果将代码中注释掉的代码恢复,也就是将组合结果放置在多列中,运行后的结果如下图2所示。

如何按指定个数在Excel中获得一列数据的所有可能组合?

标签:excel图表制作,excel常用函数,excel数据透视表,Excel教程
0
投稿

猜你喜欢

  • excel迷你图,表达数据简洁醒目

    2022-05-19 16:19:51
  • 最新版Office 2016 带来黑色主题 如何使用

    2023-11-05 19:21:38
  • word2013怎么设置图片排版

    2023-01-16 11:36:17
  • Excel表格技巧_Excel如何做函数图像

    2023-06-15 04:24:16
  • Word如何使用通配查找替换

    2022-10-31 14:58:48
  • Word文档左边的竖线怎么去掉?

    2023-07-01 13:11:49
  • win10中怎么删除微软拼音输入法?win10删除微软拼音输入法的方法教程?

    2023-08-26 05:05:13
  • 如何在word中输入带钩的方框

    2022-05-10 09:58:39
  • word页面怎么设置为A3打印格式

    2022-11-29 18:14:52
  • 常用25条Excel技巧

    2022-04-16 16:54:33
  • Win10检测不到其它显示器怎么办?Win10检测不到其它显示器的解决办法

    2023-04-03 19:22:53
  • Excel2019输入数字后直接变成日期格式怎么设置?

    2023-03-23 11:26:25
  • excel中人名币符号怎么输入

    2023-04-14 23:00:48
  • word带圈字符怎么打

    2022-12-26 16:24:10
  • Excel2010如何设置分数类型数字格式

    2022-06-30 07:27:05
  • Word文档批量删除英文字母的操作方法分享

    2022-04-26 07:19:15
  • windows7系统解除管理员权限禁用教程

    2022-10-10 11:07:45
  • word 表格中怎样快速插入序号?

    2023-07-02 06:34:24
  • Excel常用运算公式汇总

    2023-08-30 18:59:26
  • 复制资料有乱码怎么办?word来解决

    2023-12-12 18:04:03
  • asp之家 电脑教程 m.aspxhome.com