Excel精英培训网

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

如何根据某单元格内的数值,生成偏差正负100的一组随机数( 附经典VBA,请大师修改)

[复制链接]
发表于 2017-3-13 10:00 | 显示全部楼层 |阅读模式
本帖最后由 idliyi 于 2017-3-13 10:15 编辑


目标:生成10个随机数,在AA10单元格中的数值33897 基础上正负100;
注:因为经典VBA代码“生成固定的随机数”中是指定了上下限为数值,而不能采用单元格运算,所以,
目前,我采用的是 在经典VBA代码“生成固定的随机数”的基础上,先在表中(黄色标出来的行-- 纵筋长度(mm),J17:S17 )生成-100到100的数;另建一个辅助行(AA17:AJ17),然后,将之与AA10中的数值相加;最后,在VBA模块中用 Range("J17:S17") = Range("AA17:AJ17").Value,完成的。

请修改后,点击附件表格中的 “自动填写 一般项目”按钮时,可以随机生成。

请大师帮助。

Sub 生成随机数()

  Sheets("3、钢筋笼检验批").Activate           '激活工作表,自己命名的工作表名称为“Sheet1”的工作表

  For i = 15 To 19

     rng = GenerateRandNumbers("", 995, 1005, Range(Cells(i, 10), Cells(i, 19)))
      rng = GenerateRandNumbers("", 95, 105, Range(Cells(i + 1, 10), Cells(i + 1, 19)))
      rng = GenerateRandNumbers("", -20, 20, Range(Cells(i + 2, 10), Cells(i + 2, 19)))
      Range("J17:S17") = Range("AA17:AJ17").Value  '自己加的
      rng = GenerateRandNumbers("", 95, 105, Range(Cells(i + 3, 10), Cells(i + 3, 19)))
      rng = GenerateRandNumbers("", 1990, 2010, Range(Cells(i + 4, 10), Cells(i + 4, 19)))

      i = i + 25  '向下间隔25行,比一个模板表格所占行数少1行

  Next i

End Sub

Function GenerateRandNumbers(strPreString As String, intLBound As Integer, _
                                     intUBound As Integer, rngTarget As Range) As Boolean
'******************************************************************************************
'作用:根据用户设置的几个参数自动产生一系列的随机数,并填充到工作表的指定位置

'参数:
'           strPreString:这个作为最后产生的字符串的前缀
'           intLBound:这个是随机数的最小可能值
'           intUBound:这个是随机数的最大可能值
'           rngTarget:你可以选择一个目的位置,存放这些随机数

'******************************************************************************************
    On Error GoTo Errhandler
    Dim rng As Range
    For Each rng In rngTarget
        rng.Value = CStr(strPreString & Format(Int((intUBound - intLBound) * Rnd() + intLBound), String(Len(CStr(intUBound)), "0")))
    Next
    GenerateRandNumbers = True
    Exit Function

Errhandler:
    GenerateRandNumbers = False
    MsgBox Err.Description, vbCritical, "错误"
    Err.Clear
    Exit Function

End Function






根据单元格数值生成固定随机数.rar

32.09 KB, 下载次数: 8

 楼主| 发表于 2017-3-13 10:30 | 显示全部楼层
还是需要版主或高手老师指点了。大家看了后都 默默地走开了。
回复

使用道具 举报

发表于 2017-3-27 17:06 | 显示全部楼层
输出在AA1,你根据需要修改下位置。
  1. sub aaa()
  2. Dim arr(1 To 10), i&, n&, aa&
  3. aa = [aa10]
  4. Randomize (Now())
  5. Do
  6.   n = Int(Rnd() * 201) - 100 + aa
  7.   i = i + 1
  8.   arr(i) = n
  9. Loop Until i = 10
  10. [aa1].Resize(, 10) = arr
  11. End Sub
复制代码
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 03:37 , Processed in 0.290472 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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