这是一个稍微有点问题。
我有一个长1500行代码,里面有多个子代码,背后的想法是平滑100,000个数据点。
我在代码中有一个随机数生成器,在下面找到但是每当我运行主代码时,我的两个限制总是ListBox.ClearSelected()
和UpperAngleLimit= 79
但是每当我只运行这个sub时我发现我得到了像计划的总随机数。
以下是Random Limits生成的代码。
LowerAngleLimit = 6
我还提到Sub Random_Limits()
UpperAngleLimit = Int((90 - 1 + 1) * Rnd + 1)
LowerAngleLimit = Int((90 - 1 + 1) * Rnd + 1)
If UpperAngleLimit = LastUpperLimit Then
Call Random_Limits
Else
If LowerAngleLimit = LastLowerLimit Then
Call Random_Limits
Else
If UpperAngleLimit > LowerAngleLimit Then
If UpperAngleLimit > 60 Then
If LowerAngleLimit < 45 Then
LastLowerLimit = LowerAngleLimit
LastUpperLimit = UpperAngleLimit
Call Calculate_Angle
Else
Call Random_Limits
End If
Else
Call Random_Limits
End If
Else
Call Random_Limits
End If
End If
End If
End Sub
&amp;的所有其他提及。 UpperAngleLimit
也是如此。
LowerAngleLimit
^^变量定义
Global UpperAngleLimit As Double
Global LowerAngleLimit As Double
^^如果用户不想随机生成限制,则使用
RandomLimits = MsgBox("Would you like to have random limits generated?", vbYesNo)
If RandomLimits = vbYes Then
Call Random_Limits
End If
UpperAngleLimit = InputBox("What Upper Angle Limit would you like to spline the curve from?")
LowerAngleLimit = InputBox("What Lower Angle Limit would you like to spline the curve from?")
Call Limit_Def
^^用于识别个体细胞
If Cells(j, 3) < UpperAngleLimit And Cells(j, 3) > LowerAngleLimit Then
^^用于命名数据组
这些都是Cells(1, 4) = "Curve Data produced for limits at " & UpperAngleLimit & " and " & LowerAngleLimit & " @ " & Limit
和UpperAngleLimit
我觉得我可能很难得到与我一样的问题,因为我总是79岁和以上。 6但你可能会看到一个我忽略的误报。
一些额外的细节,
代码将在第3个循环中始终生成79和6,并且预先生成相同的数字。
第1次运行 - LowerAngleLimit
UpperAngleLimit = 64
第2次运行 - LowerAngleLimit = 49
UpperAngleLimit = 74
第3次运行 - LowerAngleLimit = 64
UpperAngleLimit = 78
运行4 - lowerAngleLimit = 72
UpperAngleLimit = 79
这是通过5次试运行确认的
我没有附加调用Random_Limits的sub来提供更详细的信息
LowerAngleLimit = 6
根据要求,Sub Data_SetUp()
Application.ScreenUpdating = False
Sheets("Sheet1").Columns(2).Copy Destination:=Sheets("Sheet2").Columns(1)
Sheets("Sheet1").Columns(5).Copy Destination:=Sheets("Sheet2").Columns(2)
Worksheets("Sheet2").Activate
Rows(4).EntireRow.Delete
Cells(3, 1) = "Time"
Cells(3, 2) = "Throttle"
Cells(3, 3) = "Angle"
Cells(2, 1).Select
Selection.ClearContents
StartTimer = Timer
Iterations = InputBox("How many iteration would you like to run?")
IterationNumber = 1
RandomLimits = MsgBox("Would you like to have random limits generated?", vbYesNo)
If RandomLimits = vbYes Then
Call Random_Limits
End If
UpperAngleLimit = InputBox("What Upper Angle Limit would you like to spline the curve from?")
LowerAngleLimit = InputBox("What Lower Angle Limit would you like to spline the curve from?")
Call Limit_Def
End Sub
Limit_Def
感谢您提供的任何帮助。
答案 0 :(得分:2)
根据this answer:如果您遇到Rnd
问题,请事先使用Randomize
重新播种随机数生成器。
<强>语法强>
随机化 [数字]
可选的数字参数是Variant或任何有效的数字 表达。
<强>说明强>
随机化使用数字初始化Rnd 函数的随机数生成器,给它一个新的种子值。如果你 省略 number ,系统计时器返回的值用作新的 种子价值。如果未使用 Randomize ,则使用Rnd函数(没有 arguments)在第一次调用时使用与种子相同的数字, 然后使用最后生成的数字作为种子值。
为什么Rnd
在某些情况下单独使用并且在其他情况下单独工作有点超出我的范围,但我冒昧地猜测它与主要子有关控制堆栈或运行时作用域,防止Rnd
自行随机化(按照预期) - 基本上创建上述引用末尾描述的情况。也许