ExcelVBA对一组数组进行全组合操作
SHEET1中A1:A12存放着1~12,想在SHEET2的A1:A495中列出1~12中任取4个数的全组合。要求:1、组合在单元格中存放格式为:a,b,c,d2、单元格...
SHEET1中A1:A12存放着1~12,想在SHEET2的A1:A495中列出1~12中任取4个数的全组合。
要求:
1、组合在单元格中存放格式为:a,b,c,d
2、单元格中存放的数组必须从大到小。
3、类比出如果是A1:A35存放1~35,任取5,任取6,任取7。
各位大侠,本人没学过ExcelVBA,急需各位帮忙!方便的话解说一下每个语句是什么原理
补充:
十分感谢一楼的精彩回答!但是我的组合问题是希望能满足从列中取数,例如SHEET1中A1:A12={2,5,8,9,11,14,22,23,24,26,28,35},该如何编程??? 展开
要求:
1、组合在单元格中存放格式为:a,b,c,d
2、单元格中存放的数组必须从大到小。
3、类比出如果是A1:A35存放1~35,任取5,任取6,任取7。
各位大侠,本人没学过ExcelVBA,急需各位帮忙!方便的话解说一下每个语句是什么原理
补充:
十分感谢一楼的精彩回答!但是我的组合问题是希望能满足从列中取数,例如SHEET1中A1:A12={2,5,8,9,11,14,22,23,24,26,28,35},该如何编程??? 展开
1个回答
展开全部
Sub paixu()
Dim arr(4)
Row = 1 '循环,共495行 ,row为记录行号的变量,每次增大1
For i = 12 To 1 Step -1 '排列组合题,组合不出现重复,为实现从大到小排序,取数时从大开始
For j = i - 1 To 1 Step -1 '最大数为11
For k = j - 1 To 1 Step -1 '最大数为10
For l = k - 1 To 1 Step -1 '9
arr(1) = Sheets("sheet1").Cells(i, 1)
arr(2) = Sheets("sheet1").Cells(j, 1)
arr(3) = Sheets("sheet1").Cells(k, 1)
arr(4) = Sheets("sheet1").Cells(l, 1)
For m = 1 To 3 ‘排序,由大到小
For n = m + 1 To 4
If arr(n) > arr(m) Then
swap_ = arr(m)
arr(m) = arr(n)
arr(n) = swap_
End If
Next
Next ‘排序结束
Sheets("sheet2").Cells(Row, 1) = arr(1) 'sheet2数据表里,row行的第一列显示i的值,后面三行同理
Sheets("sheet2").Cells(Row, 2) = arr(2)
Sheets("sheet2").Cells(Row, 3) = arr(3)
Sheets("sheet2").Cells(Row, 4) = arr(4)
Row = Row + 1
Next
Next
Next
Next
End Sub
Dim arr(4)
Row = 1 '循环,共495行 ,row为记录行号的变量,每次增大1
For i = 12 To 1 Step -1 '排列组合题,组合不出现重复,为实现从大到小排序,取数时从大开始
For j = i - 1 To 1 Step -1 '最大数为11
For k = j - 1 To 1 Step -1 '最大数为10
For l = k - 1 To 1 Step -1 '9
arr(1) = Sheets("sheet1").Cells(i, 1)
arr(2) = Sheets("sheet1").Cells(j, 1)
arr(3) = Sheets("sheet1").Cells(k, 1)
arr(4) = Sheets("sheet1").Cells(l, 1)
For m = 1 To 3 ‘排序,由大到小
For n = m + 1 To 4
If arr(n) > arr(m) Then
swap_ = arr(m)
arr(m) = arr(n)
arr(n) = swap_
End If
Next
Next ‘排序结束
Sheets("sheet2").Cells(Row, 1) = arr(1) 'sheet2数据表里,row行的第一列显示i的值,后面三行同理
Sheets("sheet2").Cells(Row, 2) = arr(2)
Sheets("sheet2").Cells(Row, 3) = arr(3)
Sheets("sheet2").Cells(Row, 4) = arr(4)
Row = Row + 1
Next
Next
Next
Next
End Sub
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询