Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2410|回复: 9

[已解决]请老师们修改一下代码

[复制链接]
发表于 2014-12-8 12:25 | 显示全部楼层 |阅读模式
本帖最后由 米特峰 于 2014-12-8 13:50 编辑

用VBA随机数字不能重复,,而我这个代码竟然重复了,请老师们给予指教
随机不重复5数.zip (220.42 KB, 下载次数: 6)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-12-8 12:51 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2014-12-8 13:04 | 显示全部楼层
as0810114 发表于 2014-12-8 12:51
for循环前面加一个  Randomize

还是一样有重复
回复

使用道具 举报

发表于 2014-12-8 13:05 | 显示全部楼层
米特峰 发表于 2014-12-8 13:04
还是一样有重复

我测试了没有重复
回复

使用道具 举报

发表于 2014-12-8 13:13 | 显示全部楼层
你自己用公式验证吧
=COUNT(FIND({0;1;2;3;4;5;6;7;8;9},A1))+5-LEN(A1)
回复

使用道具 举报

发表于 2014-12-8 13:15 | 显示全部楼层
  1. Sub 随机()
  2. Range("a1:a10000").NumberFormatLocal = "00000"
  3. VBA.Randomize
  4. For i = 1 To 10000
  5.   Cells(i, 1) = "": s = Int(Rnd * 10): sr = s
  6.   For x = 1 To 4
  7.     While InStr(sr, s)
  8.       s = Int(Rnd * 10)
  9.     Wend
  10.     sr = sr & s
  11.   Next
  12.   Cells(i, 1) = sr
  13. Next
  14. End Sub
复制代码

评分

参与人数 1 +1 收起 理由
米特峰 + 1 很给力!谢谢老师

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-12-8 13:20 | 显示全部楼层
as0810114 发表于 2014-12-8 13:13
你自己用公式验证吧
=COUNT(FIND({0;1;2;3;4;5;6;7;8;9},A1))+5-LEN(A1)

9999.jpg
  1. Sub 随机()
  2. Range("a1:a10000").NumberFormatLocal = "00000"
  3. Randomize
  4. For i = 1 To 10000
  5.   Cells(i, 1) = "": s = Int(Rnd * 10)
  6.   For x = 1 To 5
  7.     While InStr(Cells(i, 1), s)
  8.       s = Int(Rnd * 10)
  9.     Wend
  10.     Cells(i, 1) = Cells(i, 1) & s
  11.   Next
  12. Next
  13. End Sub
复制代码
代码执行之后结果如图,无法解决
回复

使用道具 举报

发表于 2014-12-8 13:29 | 显示全部楼层    本楼为最佳答案   
米特峰 发表于 2014-12-8 13:20
代码执行之后结果如图,无法解决
  1. Sub 随机()
  2.     Dim d As Object, ar(1 To 10000, 1 To 1)
  3.     Range("a1:a10000").NumberFormatLocal = "00000"
  4.     Set d = CreateObject("scripting.dictionary")
  5.     Do
  6.         Randomize
  7.         s = Int(Rnd * 10)
  8.         d(s) = ""
  9.         If d.Count = 5 Then
  10.             n = n + 1
  11.             m = d.keys
  12.             For j = 1 To d.Count
  13.                 ar(n, 1) = ar(n, 1) & m(j - 1)
  14.             Next
  15.             d.RemoveAll
  16.         End If
  17.     Loop While n < 10000
  18.     Range("a1").Resize(10000, 1) = ar
  19. End Sub
复制代码

评分

参与人数 1 +1 收起 理由
米特峰 + 1 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-12-8 13:49 | 显示全部楼层
qh8600 发表于 2014-12-8 13:29

运行速度提高了许多,结果正确无误,谢谢老师!
回复

使用道具 举报

 楼主| 发表于 2014-12-8 16:07 | 显示全部楼层
xdragon老师后期指导
  1. Sub 随机()
  2. Dim i%, s$, sr$, re$(1 To 10000, 1 To 1)
  3. Range("a1:a10000").NumberFormatLocal = "00000"
  4. VBA.Randomize
  5. For i = 1 To 10000
  6.   s = Int(Rnd * 10): sr = s
  7.   For x = 1 To 4
  8.     While InStr(sr, s)
  9.       s = Int(Rnd * 10)
  10.     Wend
  11.     sr = sr & s
  12.   Next
  13.   re(i, 1) = sr
  14. Next
  15. Range("A1:A10000") = re
  16. End Sub
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-14 17:50 , Processed in 0.250802 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表