用Excel实现一组数据的组合

发布网友 发布时间:2022-04-23 02:22

我来回答

5个回答

热心网友 时间:2023-10-11 14:05

我有个自己编写的全组合工具,可以帮你完成C取n的工作,不过有多少列,你就要运行多少次,当然实际数据需要你自行填写:

如图,比如你的第二列,你可以把数据放到第二行,总数输入6,取样输入3,然后点击按钮,程序会自动列出所有组合。

不过你需要把每列的数据拷贝到其他表完成最后的合并。

提示,如果你输入第二行数据时,按照大到小的方式,就应该可以得到你需要的次序

希望可以帮到你

热心网友 时间:2023-10-11 14:06

首先按Alt+F11 进入VBA代码编辑器
找到存放数据对应表名,双击打开,复制以下代码,并运行

Sub test()
Dim Arr(), n, Temp
Arr = Range("A1").CurrentRegion
'==================================================================================
'从高到低排序
For j = 1 To UBound(Arr, 2)
For i = 1 To UBound(Arr)
For k = i To 2 Step -1
If Arr(k - 1, j) < Arr(k, j) Then
Temp = Arr(k - 1, j)
Arr(k - 1, j) = Arr(k, j)
Arr(k, j) = Temp
End If
Next
Next
Next

'==================================================================================
'输入内容
Range("A15:C" & UBound(Arr) + 15).Value = Application.Transpose(Arr)
End Sub追问这个运行结果好像是存放在了当前表里,而且也不是全展开,抱歉,我对VBA的编程非常不熟悉,所以运行的效果非常差,不过还是感谢您的回答

热心网友 时间:2023-10-11 14:06

您的列只显示到W,不知后面有没有,W对应的列数是23,如果后面还有,自己改动,还有,我的程序是按由小到大的原始顺序来的,所以结果和您的顺序不一样。
方法是,工具,宏,宏,新建宏,删除原来代码,复制以下代码。
运行时点工具,宏,宏,选中cal,点执行,如果被阻止的话,从宏子菜单里点安全性,选择最低,保存,关闭,重新打开就行了。

Sub cal()
Sheets("sheet1").Select '选中表1
Row = 0
For col = 1 To 23 '23是W列的数字形式,如果后面还有,作相应改动。
i = 1
Row = Row + 1
Do While Sheets("sheet1").Cells(i + 2, col) <> "" '循环直到当前列的倒数第3个数字
j = i + 1
Do While Sheets("sheet1").Cells(j + 1, col) <> "" '循环直到当前列的倒数第2个数字
k = j + 1
Do While Sheets("sheet1").Cells(k, col) <> "" '循环直到当前列的最后1个数字
Sheets("sheet2").Cells(Row, 3) = Sheets("sheet1").Cells(i, col)
Sheets("sheet2").Cells(Row, 2) = Sheets("sheet1").Cells(j, col)
Sheets("sheet2").Cells(Row, 1) = Sheets("sheet1").Cells(k, col)
k = k + 1
Row = Row + 1
Loop
j = j + 1
Loop
i = i + 1
Loop
Next
End Sub

热心网友 时间:2023-10-11 14:07

这个需要用到编程了

热心网友 时间:2023-10-11 14:07

Vba

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com