暂存功能并将结果打印到单元格 VBA

Posted

技术标签:

【中文标题】暂存功能并将结果打印到单元格 VBA【英文标题】:Staging function and printing results to cells VBA 【发布时间】:2013-05-27 02:29:16 【问题描述】:

基本上我有一个数组A = Array(1, 2, 3, 4, 5),我想做的是,使用Rnd(),根据随机数的值围绕这个循环。

基本上从0 Mod 5开始获取一个随机数。如果随机数小于 0.5,那么我留在0 Mod 5,但是如果随机数大于或等于 0.5,那么我移动到1 Mod 5,然后因为它被传递到下一个阶段'它会再次滚动',所以我给它传递了一个新的随机数,看看它是否可以到达2 Mod 5

我的目标是运行 10,000 次并将结果收集到电子表格的 A 列中,然后绘制散点图以查看其工作原理。

现在我创建了一个函数

Function looper(R, i)
If R < 0.5 Then
    j = i
Else
    j = i + 1
End If
If j = i Then
    Exit Function
Else
    newR = Rnd()
    j = looper(newR, j)
End If
End Function

加上子

Sub loopy()
A = Array(1, 2, 3, 4, 5)
Randomize
R = Rnd()
k = looper(R, 1)
Cells(1, 1).Value = A(k Mod 5)

但是它只返回值 1。

我很确定我在做一些根本错误的事情,无论是我的逻辑,还是我试图将我的逻辑放入 VBA 代码的方式。

【问题讨论】:

【参考方案1】:

您是否正在尝试分析和/或破解在线轮盘赌逻辑? ;)


您的looper 函数旨在始终返回1。 即使随机数大于0.5,您也在递归调用该函数——所以,简单来说,它会重复直到新的随机数小于0.5,如果是,则返回1。 因此,我为您重写了此代码,此代码将打印出 how many random numbers greater than 0.5 can I get in a row 的结果 - 在 A 列中。 它会打印它通过的阶段数
Option Explicit

Sub roulette()
    Dim ws As Worksheet, nextRow&, i&, max&
    Set ws = Sheets(1): ws.Cells.ClearContents
    For max = 1 To 10001
        nextRow = ws.Range("A" & Rows.Count).End(xlUp).Row + 1
        ws.Range("A" & max).Value = getStage
    Next max
End Sub

Function crack() As Boolean
    Dim x#: Randomize: x = Rnd()
    If x >= 0.5 Then crack = True
End Function

Function getStage() As Long
    Dim cnt&
    While crack: cnt = cnt + 1: Wend: getStage = cnt
End Function

【讨论】:

【参考方案2】:

好的,所以我改变了我的功能

Function looper(i)
R = Rnd()
If R < 0.5 Then
    looper = i
Else
    looper = i + 1
End If
End Function

并改变了我的子

Sub loopy()
A = Array(1, 2, 3, 4, 5)
Cells(1, 1).Value = "Number"
For i = 2 To 10001
    k = 1
    j = 1
    While k = j
        j = looper(k)
        k = k + 1
    Wend
    Cells(i, 1).Value = A(j Mod 5)
Next i
End Sub

这给了我想要的。然而,我现在希望,一些明亮的火花可以构想出一种更好的方法,它不涉及我一直被教导的 While 循环,应尽可能避免。

【讨论】:

以上是关于暂存功能并将结果打印到单元格 VBA的主要内容,如果未能解决你的问题,请参考以下文章

Vba找到第一个空单元格并平均它上面的4个单元格并将值粘贴到另一个单元格中

需要 VBA 代码才能单击将内容从一个单元格移动到另一个单元格的按钮

使用 VBA 将多个单元格粘贴到一个单元格中

VBA宏在Excel中格式化1个包含文本行的单元格,并将这些行添加到单独的行中

VBA - 复制单元格并粘贴列中的空行

excel vba如何将选中的不连续单元格赋值到数组