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