Excel精英培训网

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

[已解决]求助关于随机取数的代码

[复制链接]
发表于 2012-8-5 14:45 | 显示全部楼层 |阅读模式
VB专家,你好,我有问题要求写在附件里面啦,希望能得到你的帮助
最佳答案
2012-8-5 16:02
本帖最后由 mxg825 于 2012-8-5 16:29 编辑
  1. Sub 填充数据()
  2. Dim Temp%, X%, Y%, R%, C%, Arr
  3. Arr = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) '赋10个数值,可随意增减数值个数
  4. C = UBound(Arr) '数值个数
  5. For R = 1 To 10 '填充10行(填充总行数)
  6.     For X = 0 To C '  这个循环是:起【打乱顺序】功能!
  7.         Y = Int(Rnd * (C + 1)) '随机数 换换位置
  8.             Temp = Arr(X)
  9.             Arr(X) = Arr(Y)
  10.             Arr(Y) = Temp
  11.     Next
  12. Range("A" & R).Resize(1, C + 1) = Arr '把打乱后数据 导出填充到单元格
  13. Next '下一行!
  14. End Sub
复制代码

新建 Microsoft Excel 工作表 (2).rar

4.4 KB, 下载次数: 21

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-8-5 14:54 | 显示全部楼层
你这个问题,把生成随机数!
换成 随机填充到单元格!
回复

使用道具 举报

发表于 2012-8-5 14:58 | 显示全部楼层
可以另一个高效的方式!

在A-J 先填充 0-9 10个数!

再用随机函数,随机把A-J 列单元格,其他两个单元格进行互换!来实现!
回复

使用道具 举报

 楼主| 发表于 2012-8-5 14:58 | 显示全部楼层
呵呵,可能说的不明确,不过,意思我想大家能看明白吧,应该
回复

使用道具 举报

发表于 2012-8-5 15:09 | 显示全部楼层
  1. Sub 重排序()
  2. Dim Temp%, X%, Y%
  3. For X = 1 To 10
  4.     Y = Int(Rnd * 10) + 1
  5.     If X <> Y Then
  6.         Temp = Cells(1, X)
  7.         Cells(1, X) = Cells(1, Y)
  8.         Cells(1, Y) = Temp
  9.     End If
  10. Next
  11. End Sub
复制代码
回复

使用道具 举报

发表于 2012-8-5 15:40 | 显示全部楼层

再来一个数组的!
  1. Sub 重新排序()
  2. Dim Temp%, X%, Y%, Arr
  3. Arr = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
  4. For X = 0 To UBound(Arr)
  5.     Y = Int(Rnd * 10)
  6.         Temp = Arr(X)
  7.         Arr(X) = Arr(Y)
  8.         Arr(Y) = Temp
  9. Next
  10. Range("A1:J1") = Arr
  11. End Sub
复制代码
回复

使用道具 举报

发表于 2012-8-5 15:53 | 显示全部楼层
本帖最后由 scsys1 于 2012-8-5 15:55 编辑
  1. Sub sjs()
  2. Dim a As Integer, b As Integer, c As Integer
  3. Dim rn As Range
  4. Application.ScreenUpdating = False
  5.     With Sheet2
  6.         For a = 1 To 10
  7.             For b = 1 To 9
  8.                 Set rn = .Cells(a, 1).Resize(1, 9)
  9. 100:
  10.                 c = WorksheetFunction.Round(Rnd * 9, 0)
  11.                     If WorksheetFunction.CountIf(rn, c) = 0 Then
  12.                         .Cells(a, b) = c
  13.                     Else
  14.                         GoTo 100
  15.                     End If
  16.             Next
  17.             .Cells(a, 10) = 45 - WorksheetFunction.Sum(rn)
  18.         Next
  19.     End With
  20. MsgBox "已生成,请检查!", 64, "提示"
  21. Application.ScreenUpdating = True
  22. End Sub
复制代码

新建 Microsoft Excel 工作表 (2).rar

7.94 KB, 下载次数: 10

评分

参与人数 1 +10 金币 +10 收起 理由
mxg825 + 10 + 10 鼓励一下!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2012-8-5 15:54 | 显示全部楼层
此次确实能填充,但是只填充了一行,我想执行一次填入多行。如何弄。快接近,我要的答案啦。在线等
回复

使用道具 举报

发表于 2012-8-5 16:02 | 显示全部楼层    本楼为最佳答案   
本帖最后由 mxg825 于 2012-8-5 16:29 编辑
  1. Sub 填充数据()
  2. Dim Temp%, X%, Y%, R%, C%, Arr
  3. Arr = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) '赋10个数值,可随意增减数值个数
  4. C = UBound(Arr) '数值个数
  5. For R = 1 To 10 '填充10行(填充总行数)
  6.     For X = 0 To C '  这个循环是:起【打乱顺序】功能!
  7.         Y = Int(Rnd * (C + 1)) '随机数 换换位置
  8.             Temp = Arr(X)
  9.             Arr(X) = Arr(Y)
  10.             Arr(Y) = Temp
  11.     Next
  12. Range("A" & R).Resize(1, C + 1) = Arr '把打乱后数据 导出填充到单元格
  13. Next '下一行!
  14. End Sub
复制代码
回复

使用道具 举报

发表于 2012-8-5 16:02 | 显示全部楼层
快乐童年 发表于 2012-8-5 15:54
此次确实能填充,但是只填充了一行,我想执行一次填入多行。如何弄。快接近,我要的答案啦。在线等

7楼能填充10行,看看吧。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 06:44 , Processed in 0.305160 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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