VBA中的随机值生成

时间:2017-05-20 22:37:11

标签: excel vba excel-vba

我在Sheet2中有一组从第2列到第4列的值。我想在sheet3中随机生成这样的输出,并在sheet-2的每一列中包含我唯一的数据。我们可以在文本字符串之间生成随机值。

Sheet 2中:

Column 2 Column 3 Column 4
M         25          Agree
F         48          Agree
          50          DisAgree

我想在sheet3中生成随机的120行数据,就像这样。

Column 2 Column3 Column4
M         25      Agree
F         48      DisAgree
M         48      Agree
M         50      DisAgree
.
.
.
.
M        25      Agree

要说清楚,

我有三列 - Column2,Column 3,Column4

在Sheet2中,仅存在唯一值。该列中的相同值将不存在。

在Sheet3中,例如,如果我们单独使用第2列。它必须具有从第2行到第121行的随机值,如M,F,F,M,F(随机直到第121行)。

请分享您的想法。

2 个答案:

答案 0 :(得分:1)

您可以使用OFFSETRANDBETWEEN功能。

例如:

=OFFSET(Sheet2!D$1,RANDBETWEEN(0,2),0)

这将选择0到2之间的随机数,然后选择Sheet2!D1下面多行的值。因此,如果生成的随机数为2,则返回“不同意”。

只需将RANDBETWEEN函数的第二个参数设置为比可用选项数少一个。 (您可以通过使用类似COUNTA(Sheet2!D:D)-1的内容作为第二个参数来概括。)

假设您的工作表在第1行中都有标题,因此您的数据从第2行开始,您可以在Sheet3!B2中使用以下公式并将其复制到Sheet3的整个范围!B2:D121

=OFFSET(Sheet2!B$2,RANDBETWEEN(0,COUNTA(Sheet2!B:B)-2),0)

答案 1 :(得分:1)

这将检查sheet2中的列以获取数据集计数,并为从中获取数据的行生成随机数。它将数据粘贴到Sheet3中。您可以修改for循环以获取要粘贴的数据集的数量和范围。

Sub Random()
Dim lr1, lr2, lr3 As Long
Dim r1, r2, r3 As Integer
Dim sht, sht2 As Worksheet

Set sht = Worksheets("Sheet2")
Set sht2 = Worksheets("Sheet3")

lr1 = sht.Cells(Rows.Count, 1).End(xlUp).Row
lr2 = sht.Cells(Rows.Count, 2).End(xlUp).Row
lr3 = sht.Cells(Rows.Count, 3).End(xlUp).Row

For i = 1 To 120
r1 = CInt((lr1 - 1 + 1) * Rnd()) + 1
r2 = CInt((lr2 - 1 + 1) * Rnd()) + 1
r3 = CInt((lr3 - 1 + 1) * Rnd()) + 1

sht2.Cells(i, 1).Value = sht.Cells(r1, 1).Value
sht2.Cells(i, 2).Value = sht.Cells(r2, 2).Value
sht2.Cells(i, 3).Value = sht.Cells(r3, 3).Value

Next i

End Sub