excel中的VBA代码解释

Dim a As Integer
Sub 随机()
Dim x As Integer
Dim y As Integer
a = 0
Randomize '初始化
10:
x = Rnd() * (5 - 2) + 2
y = Rnd() * (6 - 2) + 2
Range("b2:f5").Interior.ColorIndex = xlNone
Cells(x, y).Interior.ColorIndex = 3
DoEvents
If a = 1 Then Exit Sub
GoTo 10
End Sub
Sub 结束()
a = 1
End Sub

请问高手以上的x = Rnd() * (5 - 2) + 2
y = Rnd() * (6 - 2) + 2一下的部分怎么解释,谢谢!

一,Range("b2:f5").Interior.ColorIndex = xlNone
Range是区域对象,Range("b2:f5")就是指左上角为“B2”单元格,右下角为“F5”单元格这样一个连续的区域,应该是4行5列的一个区域。
Interior.ColorIndex 是指填充颜色(这里是采用ColorIndex严格说是颜色常数)
xlNone 表示清除原来的填充色。
所以这行代码就是清除区域Range("b2:f5")里的填充色。
二,Cells(x, y).Interior.ColorIndex = 3
Cells是单元格对象,Cells(x, y)就是指第x行y列对应的单元格
所以该行作用是,设置Cells(x, y)单元格的填充颜色常数为3。(具体3对应什么颜色我也背不出来)
三,DoEvents,这个都使用在反复执行用户循环的代码里。我们有体会,当执行次数很多的循环时,计算机的执行权完全被该循环控制,计算机无法执行其他操作,为此执行该语句,是让计算机可以执行其他操作。
四,If a = 1 Then Exit Sub
当 a = 1 退出过程,即结束运行该过程。
五,GoTo 10
无条件转移语句,就是转移到行号为10的那个语句。
你的这个过程如下:
Sub 随机()
Dim x As Integer
Dim y As Integer
a = 0
Randomize '初始化
10:
x = Rnd() * (5 - 2) + 2
y = Rnd() * (6 - 2) + 2
Range("b2:f5").Interior.ColorIndex = xlNone
Cells(x, y).Interior.ColorIndex = 3
DoEvents
If a = 1 Then Exit Sub
GoTo 10
End Sub
而下面是另一个过程,上面没有语句调用过它,所以无关;

Sub 结束()
a = 1
End Sub
分析你上面的过程,似乎进入死循环,因为没有使得 a = 1 的操作?
10:
。。。。。。
。。。。。。
Goto 10
从上到下,执行到Goto 10,又回到10:那一行,反复无限循环。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-08-02
Rnd()在VBA里可以随机生成一个大于0、且小于1的数值
x = Rnd() * (5 - 2) + 2
即是 随机值 * (5 - 2) + 2
第2个回答  2017-08-02
rnd()得0~1随机数,则rnd()*(5-2)得0~3随机数,那么x=rnd()*(5-2)+2得2~5随机数;
同理y得2~6随机数。
希望能帮到您。追问

你好,那么:x = Rnd() * (5 - 2) + 2
y = Rnd() * (6 - 2) + 2 这个里面的数字换成其他的也行吗?既然是取随机值的话

相似回答