向各位高手请教一下。
我用Excel整理数据。
假如我的数据是:
123456
123456
123456
等多行有序相同的数据。
有没有什么办法可以让这些多行的数据随机排序。每一行的排列顺序都是随机生成的。但每一行都必须保证123456这几个数字都存在。
生成的数据结果:
6127354
2371654
1472563
首先表示感谢。
但是还得麻烦您帮我解释一下用法好吗?因为我也不是太熟悉Excel的操作。就是你写的程序怎么应用。具体的每一句的意思能帮忙解释一下吗?谢谢了。
教你一个笨办法,
先的数据转置为列:复制->选择性粘贴->转置
然后在另一列输入公式:=rand(),向下填充.
然后以输入公式的那一腊态列排序,
要一列一列来,每一列数据都分别与输入公式的那一列排序一次,
这样:
1 =RAND() 1 =RAND() 1 =RAND()
2 =RAND() 2 =RAND() 2 =RAND()
3 =RAND() 3 =RAND() 3 =RAND()
4 =RAND() 4 =RAND() 4 =RAND()
5 =RAND() 5 =RAND() 5 =RAND()
6 =RAND() 6 =RAND() 6 =RAND()
然后再把数据转置为行派清.
那就这轮羡源样:
Sub ss()
Dim A1() As Long, A2
Dim r As Long, c As Long, i As Long, j As Long, k As Long
Dim s As Long, o As Long
r = ActiveSheet.UsedRange.Rows.Count'取激活工作表已使用的行数
c = ActiveSheet.UsedRange.Columns.Count'取激活工作表已使用的列数
For i = 1 To r'循环,处理每一行
ReDim A1(c)
Randomize
For j = 1 To c
A1(j) = ActiveSheet.UsedRange.Cells(i, j).Value'取当前行各单元格的值
Next j
A2 = A1
For j = 1 To c
If (UBound(A1) = 1) Then
ActiveSheet.UsedRange.Cells(i, j).Value2 = A1(1)
Else
s = Int(Rnd() * UBound(A1)) + 1'取一个随机数
ActiveSheet.UsedRange.Cells(i, j).Value2 = A1(s)
ReDim A1(UBound(A1) - 1)
o = 0
For k = 1 To UBound(A2)
If k <> s Then
A1(k - o) = A2(k)
Else
o = 1
End If
Next k
A2 = A1
End If
Next j
Next i
End Sub
先打开VBA编辑器,插入一个模块,然后把代码粘贴进去,把光标定位在代码中任意位置,按"F5"就要运行了,要保证要排序的表为激活的.
或者在工作表中插入一个按钮,指定宏为"SS",然后单击按钮就好了.
在B1输入或复制粘贴此公式
=OFFSET($A$1,RANDBETWEEN(0,91),)&OFFSET($A$1,RANDBETWEEN(0,91),)
或
=INDEX($A:$A,RANDBETWEEN(1,92))&INDEX($A:$A,RANDBETWEEN(1,92))
或
=INDIRECT("A"&RANDBETWEEN(1,92))&INDIRECT("A"&RANDBETWEEN(1,92))
下拉填充。
每毕渣按按F9一次带数逗更新一次数据。
也蠢卖可下拉填充92*92行,得到需要的排列。
这个问题,其实在数据库上叫“笛卡尔乘积”,数伍中唤腔凯据可能转眼就成
天文数字的,一般要避免……
你这个问题,还好只有92个字。可培樱以这样,竖排92字,然后复制——转置,横排。
这样构成一个矩形方阵,用“&”就可以列出所有的数据组合。
前面学习的排序方法都是按不同类别进行的,如果是任意排纳敬序,比如考场的座位号,没有规律滑碰,如何排序? 在D2单元格输入:=RAND() ,再双击填充公式,选中这一列任意一单元格,点击【开始信茄谈】选项卡中的【排序和筛选】按钮,选择【升序】或【降序】即可