2016-07-06 7 views
0

私は0-1から5000回ランダム変数を生成しようとしています。そして、それらを範囲に入れます。 0-0.05、0.05-0.1 ....私は各範囲の頻度を数えることができるように。VBA配列の問題

しかし、コードがうまくいかないようです。誰でもそれを助けることができますか?とても有難い!!!!

Option Explicit 
Option Base 1 

Sub MNA() 

    Dim Iteration As Long, i As Long 

    Iteration = 5000 

    ReDim AI1(Iteration) As Double 

For i = 1 To Iteration: Cells(4, 3) = i 

    AI1(i) = RandomNumber 

Next i 

Call Hist1(Iteration, 20, 0, 1, AI1) 

End Sub 

Function RandomNumber() 

Randomize 

RandomNumber = Rnd() 

End Function 
Sub Hist1(n As Variant, M As Long, Start As Double, Right As Double, arr() As Double) 

    Dim i As Long, j As Long, Find As Long 
    Dim Length As Double 
    ReDim breaks(M) As Single 
    ReDim freq(M) As Single 


For i = 1 To M 
    freq(i) = 0 
Next i 
    Length = (Right - Start)/M 

For i = 1 To M 
    breaks(i) = Start + Length * (i) 
Next i 

For i = 1 To n 

    If (arr(i) <= breaks(1)) Then freq(1) = freq(1) + 1 
    If (arr(i) >= breaks(M - 1)) Then freq(M) = freq(M) + 1 

    For j = 2 To -1 

     If (arr(i) > breaks(j - 1) And arr(i) <= breaks(j)) Then freq(j) = freq(j) + 1 

    Next j 
Next i 

For i = 1 To M 
    Cells(3, i + 13) = breaks(i) 
    Cells(4, i + 13) = freq(i) 
Next i 

End Sub 
+0

怒鳴るロジャーさんのコメント次

EDIT?正しい出力が得られていないか、エラーが発生していますか? – phil652

+0

あなたの助けていただきありがとうございます。私は正しい出力を得ていません。 –

+0

入手している出力は何ですか?また、期待している出力は何ですか?残念ながら、SO水晶球は故障していますので、問題がどこにあるかを知るために入力が必要です。 – RGA

答えて

1

これは機能するはずです。 arcadeprecinctのようにタイプミスがあります。ループ内にCall Hist1(Iteration, 20, 0, 1, AI1)も入れなければなりません。

あなたはこれから学ぶことができます。動作していない何

Option Explicit 
Option Base 1 

Sub MNA() 

    Dim Iteration As Long, i As Long 

    Iteration = 5000 

    ReDim AI1(Iteration) As Double 

For i = 1 To Iteration: Cells(4, 3) = i 

    AI1(i) = RandomNumber 
    Call Hist1(Iteration, 20, 0, 1, AI1) 

Next i 



End Sub 

Function RandomNumber() 

Randomize 

RandomNumber = Rnd 


End Function 
Sub Hist1(n As Variant, M As Long, Start As Double, Right As Double, arr() As Double) 

    Dim i As Long, j As Long, Find As Long 
    Dim Length As Double 
    ReDim breaks(M) As Single 
    ReDim freq(M) As Single 


For i = 1 To M 
    freq(i) = 0 
Next i 
    Length = (Right - Start)/M 

For i = 1 To M 
    breaks(i) = Start + Length * (i) 
Next i 

For i = 1 To n 

    If (arr(i) <= breaks(1)) Then freq(1) = freq(1) + 1 
    If (arr(i) > breaks(M - 1)) Then freq(M) = freq(M) + 1 

    For j = 2 To M - 1 

     If (arr(i) > breaks(j - 1) And arr(i) <= breaks(j)) Then freq(j) = freq(j) + 1 

    Next j 
Next i 

For i = 1 To M 
    Cells(3, i + 13) = breaks(i) 
    Cells(4, i + 13) = freq(i) 
Next i 

End Sub 
+1

(arr(i)= breaks(1))次に、freq(1)= freq(1)+ 1 の場合、 = freq(M)+ 1 ....は、両方が等しくなるべきではない。両方をトリガーする値を得ることができます。 1つは<=ともう1つ>または< and > = – Rodger

+0

とする必要があります。VBAは、一度値が最初の基準を満たしたら、ステップバイステップを実行しません。 –

+1

2つ目をELSEIFに変更しない限り、両方実行されます。https://msdn.microsoft.com/en-us/library/752y8abs.aspx – phil652