利用字典去重,下面是示例代码,去除第一列的重复项Sub Test() '利用字典去重,字典的特性是key值不能重渣埋复
Dim Dic, Arr
Dim i As Integer, r As Integer
Dim Str As String
r = Sheet1.Range("A65536").End(xlUp).Row
If r = 1 Then Exit Sub '岁拿如果第一列没有数据那么退出程序
Set Dic = CreateObject("scripting.dictionary") '创建字典对象
For i = 1 To r '将第一列数据添加到字典的key值中
Dic(CStr(Cells(i, 1))) = ""
Next
Arr = Dic.keys '返回字典key的数组
Set Dic = Nothing '销毁对象
Str = Join(Arr, ",") '将数组中的内容显示如雀蚂为一字符串
MsgBox Str
End Sub
Public Function 不重复随机数(小数 As Integer, 大数 As Integer, 个数 As Integer)If 个数 >大数 - 小数 + 1 Then Exit Function
Dim arr()
ReDim arr(个数 - 1)
Dim b() As Boolean
ReDim b(大数 - 小数)'取数标志
Dim x As Integer, y As Integer
Randomize
For I = 0 To 个数 - 1
Do'找到x的位置,y表示洞昌碧迅旁x在取数标志数组的位置
x = Int(Rnd * (大数 - 小数 + 1)) + 小数
y = x - 小数
Loop While b(y)
b(y) = True
arr(I) = x'找到未取的数,并放入数组,设置标志位
Next I
不重复纳举随机数 = Application.Transpose(arr)
End Function
哦,rand是产生随即数的函数,不过你需要一个随即种子,否则每次开始运行的随机结果会相同的。判断贺誉裂如果重复了就自动再次生成。。不过感觉这个效率不是很高,禅闭因为不停的要判断重复。所以效率很定低下。你可以虚斗一次产生1-10000之内的随机数字1000个。这样再从中去处不重复的10个,然后根据对应关系再影射到100-300之间,应该就很好了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)