出于某种原因,运行此宏时没有任何反应。我可能做错了什么?
(我正试图用随机选择的字符串填充范围内的每个单元格。)
Sub ktr()
Dim dataRange As Range
Set dataRange = Range("A1:V35")
For Each cell In dataRange
response = azerothSays()
cell.Value = response
Next cell
End Sub
Private Function azerothSays()
Dim result As String
Select Case Rnd(6)
Case 1
result = "CELIBACY"
Case 2
result = "WORMS"
Case 3
result = "AGING"
Case 4
result = "MARRIAGE"
Case 5
result = "CHEMISTRY"
Case 6
result = "DISINTIGRATE"
End Select
azerothSays = result
End Function
答案 0 :(得分:4)
Rnd()始终生成一个介于0和1之间的(十进制)数字。因此,如果您想获得1到6之间的随机数,请尝试使用以下代码替换Select Case行:
Select Case Int((6 * Rnd) + 1)
“数学部分”找到1到6之间的数字,Int()将其转换为整数。
一般来说,公式是
Int ((upperbound - lowerbound + 1) * Rnd + lowerbound)
答案 1 :(得分:0)
约翰打扰我评论RND,但这不是唯一的问题。
首先是一个风格问题。如果您有一个选择案例陈述,则始终包含案例。在你的代码中,这是本来应该执行的。如果您使用调试器逐步完成代码,那么您自己就会看到这个问题。
此外,范围内的每个细胞似乎都没有按照您的意愿行事。在Excel 2004中,您将获得一个空值
我真的会看一下Excel帮助中的示例。它有一个用于单元属性示例,用于说明如何设置范围中的值。
在这种情况下更像(取决于设置的选项基础)
for row = 1 to 21
for col = 1 to 35
dataRange.Cells(Row, col).Value = azerothSays()
next
next
为了使调试更容易,我将把函数中的rando位编码为
Dim r as integer
r = Int((6 * Rnd) + 1)
Select Case (r)
然后你可以看到调试器中随机数是什么