如果要生成唯一随机数列表,则可以使用RANDBETWEEN函数和VBA RND。在本文中,我们将从提供的列表中生成3个唯一编号。

您可以找到原始问题http://www.excelforum.com/excel-programming-vba-macros/1093315-vba-for-do-while-loop.html [此处]

问题:我希望宏从保存在A列中的数字列表中生成3个随机数的列表。在某种情况下,需要注意VBA代码。条件是B列中存在3个数字,因此宏需要创建一个在B列中一次都没有出现过的数字列表。这样,我们可以在B&C列中拥有一个唯一数字列表。 ||||以下是示例的快照:

img1

===

获取唯一的随机数列表;我们需要按照以下步骤启动VB编辑器:单击“开发人员”选项卡。从“代码”组中,选择“ Visual Basic”。 *将以下代码复制到标准模块中

若要运行宏,如果您在Visual Basic编辑器的屏幕中处于活动状态,则可以从键盘上按F5键。另一种运行宏的方法是使用“ ALT + F8”键;选择宏并单击运行按钮

img2

  • 当我们运行VBA代码时,唯一编号列表将自动生成

Sub RandomNumbers()

Dim ws As Worksheet

Dim ar As Variant

Dim RandomNum As Long

Dim i As Integer

Dim myVal As Long

Randomize

Set ws = ThisWorkbook.Sheets("Numbers")

With ws

ar = .Range("A" & Rows.Count).End(xlUp).Row

.Range("C1:C3").ClearContents

For i = 1 To 3

Do

RandomNum = Int((1 - ar + 1) * Rnd + ar)

myVal = .Range("A" & RandomNum).Value

Loop Until Range("B1:C24").Find(what:=myVal, lookat:=xlWhole) Is Nothing

.Range("C" & i).Value = myVal

Next i

End With

End Sub

img3

img4

代码说明:

img5

在上面的代码中,我们将使用RND&INT函数以及For循环和Do循环来获取结果。

  • 我们将Dim ws声明为工作表;将ws声明为工作表的目的是我们只希望代码在特定的工作表上运行,即

示例中的数字Dim RandomNum As Long:将保存唯一的数字Set ws = ThisWorkbook.Sheets(“ Numbers”):该行将确保代码仅在Numbers表上运行下一行代码将与With语句一起使用ar = .Range(“ A”&Rows.Count).End(xlUp).Row:此行将保存A列中的最后一个单元格(在我们的示例中为24)

Range(“ C1:C3”)。ClearContents:此行将擦除范围C1:C3中的所有现有内容。接下来,我们将使用Do Loop从1到3次运行For循环,以生成随机数列表并检查是否有重复项在现有范围内,即B列结论:我们可以通过上述VBA代码中的细微调整从Microsoft excel中的列表生成不同随机数的列表。

如果您喜欢我们的博客,请在Facebook上与您的朋友分享。您也可以在Twitter和Facebook上关注我们。

我们很高兴收到您的来信,请让我们知道我们如何改进,补充或创新我们的工作,并为您做得更好。写信给我们[email protected]

image 48