2016-12-24 109 views
0

当我运行代码时,它会生成一个介于100和210之间的随机数字,我希望我的j按以下方式进行评估,但不会发生这种情况。我的代码“vba”有什么问题

它为j生成数字,但它不符合我编码的条件。

Range("J12").Formula = "=RANDBETWEEN(100,210)" 

x = Range("J12").Value 


    If x < 109 And x >= 100 Then 
j = 100 

ElseIf x > 109 And x < 119 Then 
    j = 110 

ElseIf x > 119 And x < 129 Then 
    j = 120 

ElseIf x > 129 And x < 139 Then 
    j = 130 

ElseIf x > 139 And x < 149 Then 
    j = 140 

ElseIf x > 149 And x < 159 Then 
    j = 150 

ElseIf x > 159 And x < 169 Then 
    j = 160 

ElseIf x > 169 And x < 179 Then 
    j = 170 

ElseIf x > 179 And x < 189 Then 
    j = 180 

ElseIf x > 189 And x < 199 Then 
    j = 190 

Else: j = 200 

    End If 

Range("I12").Value = j 
+0

难道你打算有利于价值200的引入偏见实现?如果不是,为什么还要用'J12'来代替'I12'中的公式'= 100 + 10 * RANDBETWEEN(0,10)'? –

回答

1

编辑添加veeery短替代(一看便知的底部)

,那是因为你必须计算自动和后Range("I12").Value = j声明中的工作表被计算RANDBETWEEN()公式你把J12被重新计算所以你看不出它与您在I12以前写过这样最后重新计算

j你可以使用这个

Sub main() 
    Dim x As Long, j As Long 

    With Range("J12") 
     .Formula = "=RANDBETWEEN(100,210)" 
     .Value = .Value 

     Select Case .Value 
      Case 100 To 108 
       j = 100 

      Case 109 To 118 
       j = 110 

      Case 119 To 128 
       j = 120 

      Case 129 To 138 
       j = 130 

      Case 139 To 148 
       j = 140 

      Case 149 To 158 
       j = 150 

      Case 159 To 168 
       j = 160 

      Case 169 To 178 
       j = 170 

      Case 179 To 188 
       j = 180 

      Case 189 To 198 
       j = 190 

      Case Else 
       j = 200 

     End Select 
    End With 
    Range("I12").Value = j 
End Sub 

BTW相同的结果是由下面的代码

Sub main()  
    With Range("J12") 
     .Formula = "=RANDBETWEEN(100,210)" 
     .Value = .Value 
     .Offset(, -1).Value = IIf(.Value > 208, 200, Int((.Value + 1 - 100)/10) * 10 + 100) 
    End With 
End Sub 
+0

它工作。感谢您的帮助。我在那之前试过了case case方法,但是我找不到一种方法来使x值在100到108之间...所以我知道了。再次感谢你。 –

+0

不客气。然后,您可能想要将答案标记为已接受。谢谢! – user3598756

+0

您在底部的推定等效代码并不等同。当'RANDBETWEEN(100,210)'返回209或210时,代码计算值210,而其他代码计算200.OP的规范引入了偏向于值200的轻微偏差,尽管这可能是意外的。 –