2016-12-16 86 views
1

我创建了下面的代码,它在技术上可以正常工作。它从84下降的所有使用行的C列中放置一个从1到3的随机数。由于它只限于3个值,所以我经常会连续得到相同的数字。有没有办法阻止这种情况发生?所以如果C84最终成为“2”,C85必须是“1”还是“3”?VBA - 不随机使用相同编号的Excel RANDOM公式

Sub RandomNumbers() 
Application.ScreenUpdating = False 
Range("C84") = "=RANDBETWEEN(1,3)" 
Dim LastRow As Integer 
LastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row 
Range("C84:C" & LastRow) = "=RANDBETWEEN(1,3)" 
End Sub 
+0

如果你想让输出更“随机”,那么你可以使用“RANDBETWEEN(1,10)”吗?你也忘了重新开启ScreenUpdating。 –

+0

为什么使用Random,你可以在连续性中填充1 2 3。会更有意义。 – cyboashu

+0

它需要在1和3之间,它不能只是1,2,3,它需要像21313123123132132 ... – Robby

回答

1

说,我们要生成值的1和3之间的列随机不重复的顺序。

没有VBA:

A1输入:

=RANDBETWEEN(1,3) 

A2输入:

=IF(A1=1,RANDBETWEEN(2,3),IF(A1=3,RANDBETWEEN(1,2),IF(RAND()<0.5,1,3))) 

抄下:

enter image description here

如果您肯定需要VBA,那么您可以使用VBA粘贴公式。

+0

这个工程!我从来没有想过这样做。谢谢。 – Robby

1

如何以下循环:

Sub RandomNumbers() 

Dim LastRow As Long 
LastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row 

For i = 84 To LastRow 

ActiveSheet.Range("C" & i).Value = Application.WorksheetFunction.RandBetween(1, 3) 

    Do Until ActiveSheet.Range("C" & i).Value <> ActiveSheet.Range("C" & i - 1).Value 

    ActiveSheet.Range("C" & i).Value = Application.WorksheetFunction.RandBetween(1, 3) 

    Loop 

Next i 

End Sub 
+0

这可能适用,但仅供参考,你可以删除'ActiveSheet.' - 它是默示如果你没有指定一个表名称。 – user1274820

+1

学到了新东西。谢谢@ user1274820 –