2

さまざまな生産率をランダムに生成する小さなプログラムがあります。最初は配列なしでプログラムを実行しました。値はすべての行に出力されましたが、機能し、遅かったです。だから今、私は配列で同じことをしようとしましたが、私の問題は値を出力することです:

私のコード(テスト実行したい場合は、コードを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 はゼロとして出力されます

(編集済み)

4

2 に答える 2

2

転置は必要ありません:

 Cells.Find("Prodthishour").Offset(1, 0) _
     .Resize(UBound(ProductionArray, 1),1).Value = ProductionArray

(配列に期待値があると仮定します-私はその部分を見ていませんでした...)

于 2013-09-05T22:05:15.423 に答える
0

を使用してマトリックスを正しく定義するかどうか疑問に思っています

ReDim ProductionArray(Openhours, 1) As Double

私にとって奇妙な部分は、私が使用するときです

ProductionArray(n, 1) = A + Minimumatprod + Rnd() * (Maxlimit - Minimumatprod - A)

配列はゼロとして出力されますが、

Cells.Find("Prodthishour").Offset(n, 1).Value2 = ProductionArray(n, 1)

(エラーをチェックする方法として)各ステップの値を出力すると、完全に細かい値が得られますが、最後に出力しようとすると、これらは何らかの形で ProductionArray に存在しません。

于 2013-09-06T15:57:57.650 に答える