VBA coding - 生成随机变量
VBA coding - Generating Random Variable
我想把代码写成VBAexcel。我已经准备了如下所示的算法,但我不知道我将如何在 VBA 中编写它:/
有人可以帮我解决这个问题吗?
1)赋初值:Current为1,Year为0,Result为空串。
2) 从U(0,1)生成一个随机变量u;
3) 如果Current为1,且u≤0.23,则将0赋值给Current。如果 Current 为 0,并且 u > 0.86,则将 1 分配给 Current。否则什么都不做。
4) 将 Year 增加 1。在 Result 字符串的末尾写入 Current。
5) 如果 Year 小于 cell("A2").value,则转到步骤 (2)。否则 return 结果
这会将您的英语翻译成 VBA
Sub Jona()
Dim Current As Long, Yearr As Long
Dim u As Double, Result As String
Current = 1
Yearr = 0
While Yearr < Range("A2").Value
u = Rnd()
If Current = 1 And u <= 0.23 Then
Current = 0
ElseIf Current = 0 And u > 0.86 Then
Current = 1
End If
Yearr = Yearr + 1
Result = Result & Current
Wend
MsgBox Result
End Sub
这是一个可以直接在电子表格上使用的 UDF(user-defined 函数):
Function Chain(years As Long) As String
Dim i As Long, result As String
Dim u As Single
Dim current As Long
Randomize
Application.Volatile
current = 1
For i = 1 To years
u = Rnd()
If (current = 1 And u <= 0.23) Or (current = 0 And u > 0.86) Then
current = 1 - current
End If
result = result & current
Next i
Chain = result
End Function
year
只是一个计数器,您的算法实际上描述了一个简单的 for-loop。在 VBA 中,对于一个简单的计数器来说,从 1 循环到 n 比从 0 循环到 n-1 更符合习惯——尽管这主要是个人喜好问题。另外——我将 year
更改为 i
以防止意外隐藏 built-in 函数 year()
VBA 具有变量的自然默认值,因此我不需要显式初始化 result
.
我创建了函数 volatile
-- 所以它会在电子表格执行时重新计算。这与 RAND()
在 Excel 中的工作方式相匹配。如果你不想要那个——删除行 Application.Volatile
.
截图:
我想把代码写成VBAexcel。我已经准备了如下所示的算法,但我不知道我将如何在 VBA 中编写它:/ 有人可以帮我解决这个问题吗?
1)赋初值:Current为1,Year为0,Result为空串。
2) 从U(0,1)生成一个随机变量u;
3) 如果Current为1,且u≤0.23,则将0赋值给Current。如果 Current 为 0,并且 u > 0.86,则将 1 分配给 Current。否则什么都不做。
4) 将 Year 增加 1。在 Result 字符串的末尾写入 Current。
5) 如果 Year 小于 cell("A2").value,则转到步骤 (2)。否则 return 结果
这会将您的英语翻译成 VBA
Sub Jona()
Dim Current As Long, Yearr As Long
Dim u As Double, Result As String
Current = 1
Yearr = 0
While Yearr < Range("A2").Value
u = Rnd()
If Current = 1 And u <= 0.23 Then
Current = 0
ElseIf Current = 0 And u > 0.86 Then
Current = 1
End If
Yearr = Yearr + 1
Result = Result & Current
Wend
MsgBox Result
End Sub
这是一个可以直接在电子表格上使用的 UDF(user-defined 函数):
Function Chain(years As Long) As String
Dim i As Long, result As String
Dim u As Single
Dim current As Long
Randomize
Application.Volatile
current = 1
For i = 1 To years
u = Rnd()
If (current = 1 And u <= 0.23) Or (current = 0 And u > 0.86) Then
current = 1 - current
End If
result = result & current
Next i
Chain = result
End Function
year
只是一个计数器,您的算法实际上描述了一个简单的 for-loop。在 VBA 中,对于一个简单的计数器来说,从 1 循环到 n 比从 0 循环到 n-1 更符合习惯——尽管这主要是个人喜好问题。另外——我将 year
更改为 i
以防止意外隐藏 built-in 函数 year()
VBA 具有变量的自然默认值,因此我不需要显式初始化 result
.
我创建了函数 volatile
-- 所以它会在电子表格执行时重新计算。这与 RAND()
在 Excel 中的工作方式相匹配。如果你不想要那个——删除行 Application.Volatile
.
截图: