Chr*_*015 0 excel vba excel-vba
我有一个非常基本的循环,我用来运行一些随机的场景.在我的一个工作表中,我使用该=Rand()函数为我的工作簿生成随机数/方案.我正在尝试编程的是一个宏刷新工作簿(以及随机的数字集),然后在每次运行场景时将我的结果存入我的工作表.最终,我希望能够运行/生成100,000个随机场景并存储结果.这是我到目前为止编码的内容:
Sub Run()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim wksInput As Worksheet, i As Integer
Set wksInput = Sheets("Input")
For i = 2 To 102
Application.Calculate
With wksInput
.Range("P" & i).Value = .Range("J35").Value
.Range("Q" & i).Value = .Range("K35").Value
.Range("R" & i).Value = .Range("L35").Value
.Range("S" & i).Value = .Range("G32").Value
End With
Next i
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Run Code Online (Sandbox Code Playgroud)
我在这里工作得很好,除了运行100个场景需要23秒.基于我的计算,需要超过6小时的运行时间来获得我的100,000个随机场景.
我的问题是,是否有人知道一种聪明的方法,可以更改代码以更有效地运行或优化我已有的代码.我做了所有基本的事情,比如将计算转到手动并关闭屏幕更新.
谢谢你的想法.
问题是这一行:
Application.Calculate
Run Code Online (Sandbox Code Playgroud)
因为它是置于其内For i = 2 To 102,这意味着,每行添加所有的=rand()电子表格的功能被重新计算.
我建议你使用Rnd()VBA 的内置函数在代码中生成随机数.像这样,您将只生成您需要的随机输入,以避免生成N-1在Next循环Application.Calculate再次调用时无论如何都会重新生成的其他输入.
可能是什么样的?
这是逻辑(我不能具体告诉你,因为你没有显示你的整个代码/电子表格,也没有显示这个随机生成背后的逻辑):让我们说你在单元格中有三个随机数A1,A2和A3.它们都是用=Rand()单元格内的函数计算的.
现在,使用您的代码,您需要它B1,B2并且B3A + 1中有随机数的总和.
Excel解决方案(即Excel使用该函数计算随机输入=Rand()):
For j = 1 To 3
Application.Calculate '<-- this re-calculates 3 =rand(), but you need only the one you're going to use right after (==j)
Range("B" & j) = Range("A" & j) + 1
Next j
Run Code Online (Sandbox Code Playgroud)
VBA解决方案(即随机数不在Excel电子表格中,但通过VBA计算):
Randomize
For j = 1 To 3
Range("A" & j) = Rnd() '<-- you insert the random value in A1, A2...
Range("B" & j) = Range("A" & j) + 1 '<-- you use it
Next j
Run Code Online (Sandbox Code Playgroud)
Excel解决方案计算3次随机函数3次,即9次迭代.VBA解决方案计算3次随机函数3次,即3次迭代.
我让你想象100,000个场景的乘法,每个场景有100个数据.