随机数VBA帮助 [英] Random number VBA help

查看:85
本文介绍了随机数VBA帮助的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我遇到了麻烦。我想出了如何随机选择1到100范围内的数字,永不重复,并使用按钮在单元格中显示。



我想要的代码给我2个数字并显示在2个相邻的单元格中。永远不要重复。所以现在需要点击50次按钮来查看数字。



我尝试过的事情:



I am having trouble. I figured out how to randomly pick a number out of a range from 1 to 100, never to repeat, and display in a cell using a button.

I am wanting the code to give me 2 numbers and display in 2 adjacent cells. never to repeat. So it would now take 50 clicks of the button to go through the numbers.

What I have tried:

Public Sub RangeValue()
    Dim i As Long
    Static n As Long, s As String
    Const MIN = 1, MAX = 100, OUT = "L10", DEL = "."
    Randomize
    Do
        i = Rnd * (MAX - MIN) + MIN
        If 0 = InStr(s, i & DEL) Then
            n = n + 1: s = s & i & DEL
            Range(OUT) = i
            If n > MAX - MIN Then n = 0: s = ""
            Exit Do
        End If: DoEvents
    Loop
End Sub

推荐答案

Quote:

随机数VBA帮助



帮助什么?


Help what?

Quote:

我遇到了麻烦。



这个没有信息,哪种麻烦?问题是什么?



据我了解你的代码,我看到2个问题:

- 一旦你选了12个中的一个, 22,32,42,52 ......,它会阻止你选择2,因为它们中的任何一个都会匹配敌人2.

- 随着所选数字的增加,你的算法降级。

改组是要走的路:改组 - 维基百科 [ ^ ]


试试这个:



Try this:

Option Explicit

Sub Test()

    GenerateRandomNumers 50, 1, 100
End Sub

'procedure to generate random numbers
Sub GenerateRandomNumers(ByVal iCount As Integer, ByVal iMin As Integer, ByVal iMax As Integer)
    Dim iNumber As Integer, iCounter As Integer, iCol As Integer
    Dim wsh As Worksheet
    
    Set wsh = ThisWorkbook.Worksheets(1)
    iCol = 0
    iNumber = 0
    Do While iCol < 2
        Do While iCounter < iCount
            'Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
            iNumber = Int((iMax - iMin + 1) * Rnd + iMin)
            wsh.Range("L" & iCounter + 10).Offset(ColumnOffset:=iCol) = iNumber
            iCounter = iCounter + 1
        Loop
        iCounter = 0
        iCol = iCol + 1
    Loop
    Set wsh = Nothing

End Sub


这篇关于随机数VBA帮助的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆