さまざまな生産率をランダムに生成する小さなプログラムがあります。最初は配列なしでプログラムを実行しました。値はすべての行に出力されましたが、機能し、遅かったです。だから今、私は配列で同じことをしようとしましたが、私の問題は値を出力することです:
私のコード(テスト実行したい場合は、コードをvbaにコピーして、「Prodthishour」という名前のExcelワークシートに1つのセルを作成するだけでよいはずです):
Sub Production2()
Totalproduction = 10000
Maxprodperhour = 150
Minimumatprod = 50
Timeperiod = 90
Nonprodhours = 10 'Isnt used yet
Openhours = 80
Producedstart = 0 'What we have at the start of the production, often nothing
Prodleft = 10000 'The total production is what is left in the beginning
Dim Produced
Produced = Producedstart
ReDim ProductionArray(Openhours, 1) As Double
For n = 1 To Openhours - 1 'Takes minus 1 value, as the rest will be the last value
A = Prodleft - Maxprodperhour * (Openhours - n) ' A secures that the randomness isnt such that the production wont be fullfilled
If A < 0 Then
A = 0
End If
If Prodleft > Maxprodperhour Then
Maxlimit = Maxprodperhour
Else
Maxlimit = Prodleft
End If
ProductionArray(n, 1) = A + Minimumatprod + Rnd() * (Maxlimit - Minimumatprod - A)
Cells.Find("Prodthishour").Offset(n, 1).Value2 = ProductionArray(n, 1)
Produced = Producedstart 'Sets it at the startvalue again to make sure it doesn't accumulate the values
For Each Item In ProductionArray
Produced = Produced + Item
Next
Prodleft = Totalproduction - Produced
If Prodleft < 0 Then
Prodleft = 0
End If
If Prodleft < Maxprodperhour Then
Exit For
End If
Next n
Cells.Find("Prodthishour").Offset(1, 0).Resize(UBound(ProductionArray, 1), 1).Value = ProductionArray
End Sub
最初の問題は値を出力することでしたが、今では配列 "ProductionArray" がゼロとして出力されているようです。
私が使用するように私はこれが奇妙だと思います
Cells.Find("Prodthishour").Offset(n, 1).Value2 = ProductionArray(n, 1)
本当にすべてを印刷したい列の横にある値をテスト印刷し、また使用する
For Each Item In ProductionArray
Produced = Produced + Item
Next
すべてを合計すると、両方とも値が得られますが、それでも ProductionArray はゼロとして出力されます
(編集済み)