12ヶ月の中の複数月の平均を求めるアルゴリズム
お世話になります。
業務で、今度の四月から開始される『働き方改革』の中に、複数月の平均が80時間を超えてはならないと
いうのがあり、それを求めるためのツールをAccessで作成しています。
四月から始まり、三月で終わる一年の期間の中で、二ヶ月以上の連続した組み合わせ(4-5,4-5-6,4-5-6-7~1-2-3,2-3まで)の平均を算出するのですが、数を数えてみると合計で66パターンの組み合わせができてしまいます。これを人数分だけ計算するとなると、かなりの時間がかかると思います。
勿論、一つ一つ行って、一度でも80時間超えがあれば、そこで確認済みにすれば良い話ではあるのですが、これをもっと効率的にやりたいと思っています。
上記のような、『総当たりの平均』を求めるやり方で、もっと効率の良い方法はありますでしょうか?SQLなどでできれば、とてもエレガントだとは思いますが…。SQLの平均の記述が解らないのではなく、コードのようにループさせなくて済む方法です。
強引にコードに直すと、下記のようになると思います。
Dim arr(11) As Long ' ここでは宣言しかしていませんが、既に中身があるものと思ってください。
Dim d0 As Long, d1 As Long, d2 As Long
Dim val As Double
Dim flg As Boolean
flg = False
For d0 = 0 To 11 - 1
For d1 = d0 + 1 To 12 - 1
val = 0#
For d2 = d0 To d1
val = val + arr(d2)
If (val / ((d1 - d0) + 1) > 80) Then
flg = True
GoTo End_for
End If
Next
Next
Next
End_for:
よろしくお願いいたします。