C1写公式:
=RAND()
下拖复制到C10。
B1写公式:
=INDEX($A$1:$A$10,MATCH(SMALL($C$1:$C$10,ROW(B1)),$C$1:$C$10,0))
下拖复制到B10
按F9刷新,可得不同的数据!
这种方法一般是不会重复的,但不能保证一定不重复!要想完美解决,可以使用VBA:
鼠标右击Sheet1的标签,选【查看代码】,将下面的代码粘贴到代码窗口:
Sub ouyang()
Dim a(10)
Randomize (Timer)
For i = 1 To 10
a(i) = i
Next
For i = 10 To 1 Step -1
t = Int(i * Rnd + 1)
tt = a(t)
a(t) = a(i)
a(i) = tt
Next
For i = 1 To 10
Cells(i, 2) = Cells(a(i), 1)
Next
End Sub
按F5运行程序,按Alt + F11,回到Excel表,去看看B1:B10的结果吧!!!
祝你成功!
复杂一点,
D1输入 =RAND()
向下填充到 D10
E1输入公式 =RANK($D$1:$D$10,D1)
向下填充到E10
B1输入公式 =INDEX($A$1:$A$10,E1,1)
向下填充到B10
实际上如果A1:A10是 1-10 直接输入 B1直接输入 =RANK($D$1:$D$10,D1)
也可以,
其实我假设楼主A列的数据不止是1到10这么简单
在B2输入公式
=INDEX(A:A,SMALL(IF(COUNTIF(B$1:B1,ROW(A$1:A$10)),65536,ROW($1:$10)),ROUNDUP(RAND()*(11-ROW(A1)),)))
以ctrl+shift+enter三键组合结束输入
公式下拉到B11
公式是几乎不能完成的。用VBA很可以实现。