用Excel实现一组数据的组合
图1为目标数据组,存放在EXCEL表格的SHEET1中,每一列中的数据互不相同,列与列之间相互独立,我想通过EXCEL将每一列的数据进行从大到小的(Cn取3)全组合,并以...
图1为目标数据组,存放在EXCEL表格的SHEET1中,每一列中的数据互不相同,列与列之间相互独立,我想通过EXCEL将每一列的数据进行从大到小的(C n取3)全组合,并以图2的方式存放在SHEET2中,每一列的全组合空一行隔开。求高手支招!
展开
2014-06-21
展开全部
首先按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
找到存放数据对应表名,双击打开,复制以下代码,并运行
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的编程非常不熟悉,所以运行的效果非常差,不过还是感谢您的回答
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
您的列只显示到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
方法是,工具,宏,宏,新建宏,删除原来代码,复制以下代码。
运行时点工具,宏,宏,选中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
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-06-21
展开全部
这个需要用到编程了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Vba
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |