如何利用EXCEL VBA将一列数据中不重复的数据读取到数组中?

如何利用EXCEL VBA将一列数据中不重复的数据读取到数组中?,第1张

利用字典去重,下面是示例代码,去除第一列的重复项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之间,应该就很好了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11969067.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存