VBA编码 – 生成随机variables
我想写一个代码到一个VBA excel中。 我准备了下面显示的algorithm,但我不知道我将如何写在VBA中:/有人可以帮我吗?
1)分配初始值:Current为1,Year为0,Result为空string。
2)从U(0,1)生成一个随机variablesu;
3)如果电stream为1,并且u≤0.23,则将0分配给电stream。 如果Current为0,并且u> 0.86,则将1指定给Current。 否则什么都不要做
4)增加年份1.在结果string末尾写入当前值。
5)如果Year小于单元格(“A2”)的值,则转到步骤(2)。 否则返回结果
这是一个UDF(用户定义的函数),可以直接在电子表格上使用:
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
只是一个计数器,你的algorithm实际上描述了一个简单的for循环。 在VBA中,一个简单的计数器从1到n循环比从0循环到n-1更为惯用 – 尽pipe这主要是一个口味问题。 另外 – 我改变了year
,以防止意外阴影的内置函数year()
VBA具有自然的variables默认值,因此我不需要显式地初始化result
。
我让这个函数变成了volatile
– 所以只要电子表格就会重新计算。 这与RAND()
如何在Excel中工作相匹配。 如果你不想这样做 – 删除行Application.Volatile
。
屏幕截图:
这将您的英文翻译成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