第1个回答 推荐于2016-03-12
试试这段代码,运行效率还可以:
Sub test()
Dim dic As Object, newarr(), i&, i1&, c%
p = 0.7 '取数比例
c = 20000 '新表列数
Set dic = CreateObject("Scripting.Dictionary")
arr = Sheets("Sheet1").Range("A1:T25200").Value '取数范围
For Each tmp In arr
If Not (dic.exists(tmp)) Then dic(tmp) = ""
Next
dic.Remove ""
arr = dic.keys
Set dic = Nothing
num = UBound(arr)
c = Application.WorksheetFunction.Min(c, num + 1)
num1 = Int(p * (num + 1))
ReDim newarr(c - 1, Int(num1 / c))
For i = 0 To num1 - 1
i1 = Round(Rnd * num, 0)
newarr(i Mod c, Int(i / c)) = arr(i1)
arr(i1) = arr(num)
num = num - 1
Next
Sheets(2).[a1].Resize(c, Int(num1 / c) + 1) = newarr
End Sub本回答被提问者和网友采纳