求高手修改下EXCEL公式

来源:百度知道 编辑:UC知道 时间:2024/07/03 03:43:59
这是对EXCEL单列数据随机排序的公式

----------------------------
Sub randamsort()

Range("A1").Select
Selection.End(xlDown).Select
n = ActiveCell.Row / 1
For i = 1 To n
a = Rnd(1)
Cells(i * 1, 2).Value = a
Next i
Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select
Columns("A:B").Select
Selection.Sort Key1:=ActiveCell.Offset(0, 1).Range("A1"), Order1:= _
xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:= _
xlSortNormal
Columns("B").Clear

End Sub
-------------------------
以前对A1整列排序
现在我需要对B1 C1……更多的列排序
不知道如何改上边的公式
上边这个只可以从A1---A1????? 进行排序

每个单元格都是一个独立的数据
最好可以对整个单元格横竖乱序排列

稍改了一下,可以对整个工作表的所有数据进行“按行随机排序”了。
原来的算法,是利用B列对A列重排。
现在改为自动判断数据区域,再利用区域外的第一空列产生随机数据,再排序,也就是说,可以对整个工作表的所有数据进行操作了。

关键:数据区域中不得有空列、空行,每次操作时,确保首行首列数据中没有空单元格!

Sub randamsort()
If MsgBox("将按行对数据随机排序!" & Chr(10) _
& "注意:数据中不得有空列、空行,首行首列不得有空单元格!" & Chr(10) & Chr(10) & "确定要操作吗?" _
, vbOKCancel + vbQuestion, "按行随机排序") <> vbOK Then Exit Sub
Cells(1, 1).Select
Selection.End(xlToRight).Select
If ActiveCell.Text = "" Then Selection.End(xlToLeft).Select
tmp = ActiveCell.Column() + 1
Cells(1, 1).Select
Selection.End(xlDown).Select
n = ActiveCell.Row
For i = 1 To n
a = Rnd(1)
Cells(i * 1, tmp).Value = a
Next i
Selection.CurrentRegion.Select
Range(Cells(1, tmp), Cells(1, tmp)).Activate
Selection.Sort Key1:=ActiveCell, Order1:= _
xlAscendin