2016-12-24 3 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

あなたが計算自動を持っているとRange("I12").Value = j文の後のワークシートを計算しますと、あなたはJ12に入れRANDBETWEEN()式が再計算されますので、それはだ

(答えの下を参照)veeery短い代替を追加する編集そのため、あなたはこの

を使用することができ、それはあなたがそのような最後の再計算

に以前I12に書いjと一致して表示されません210

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 

ところで、同じ結果が次のコード

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メソッドを試しましたが、ıcouldntは100から108の間のx値を作る方法を見つけることができませんでした。だからıはそれを学びました。ありがとうございました。 –

+0

ようこそ。あなたは受け入れられたとして回答をマークしたいかもしれません。ありがとうございました! – user3598756

+0

あなたの推定上の同等のコードは一番下にありません。 'RANDBETWEEN(100,210)'が209または210を返すとき、コードは値210を計算するが、他のコードは200を計算する。OPの仕様は意図しつかなかったかもしれないが、値200のほうにわずかなバイアスを導入する。 –

関連する問題