2017-05-10 9 views
0

幾何分布を使用してさまざまな列に数値を広げたいと思います。Excelで幾何分布を使用して列に数値を広げる

など。私は100ドルを10週間以上配分する必要があります。幾何学分布を使用すると、最も高い金額は第1週に、第2週にはより少ない金額で、第10週には最も低い金額が割り当てられ、すべての週の金額が再び100USドルになります。

私はいくつかの値を配布しており、列の数はさまざまです。標準化された幾何学的分布パターンを使用したいと考えています。

上記の例では、適切な機能をお手伝いできるのは誰ですか?あなたが最後の5日間で何かをしようとしていないという事実を、に関する

おかげ N

+0

あなたはこれまで何をしていますか? :) – Vityata

答えて

0

は、ここに私が思い付いたものです:

Option Explicit 

Public Sub GeometricCraziness(rngRange As Range, Optional lngAccuracy As Long = 16) 

    Dim rngCell   As Range 
    Dim rngLast   As Range 

    Dim dblTotal  As Double 
    Dim dblLeft   As Double 
    Dim dblSumArray  As Double 

    Dim lngCounter  As Long 
    Dim varArray  As Variant 

    dblTotal = rngRange(1, 1) 
    dblLeft = dblTotal 
    lngCounter = 0 

    ReDim varArray(rngRange.Count - 1) 

    For Each rngCell In rngRange 
     If lngCounter Then 
      varArray(lngCounter) = 1/(2^lngCounter) 
      rngCell = Round(dblTotal/(2^lngCounter), lngAccuracy) 
      dblLeft = dblLeft - rngCell.value 
      Set rngLast = rngCell 
     End If 
     lngCounter = lngCounter + 1 
    Next rngCell 

    For lngCounter = LBound(varArray) To UBound(varArray) 
     dblSumArray = dblSumArray + varArray(lngCounter) 
    Next lngCounter 

    For lngCounter = 1 To UBound(varArray) 
     varArray(lngCounter) = Round(varArray(lngCounter)/dblSumArray, lngAccuracy) 
    Next lngCounter 

    lngCounter = 0 

    For Each rngCell In rngRange 
     If lngCounter Then 
      rngCell = Round(rngCell + rngLast * varArray(lngCounter), lngAccuracy) 
     End If 
     lngCounter = lngCounter + 1 
    Next rngCell 

End Sub 

あなたはこのcall GeometricCraziness(selection) とIFを呼び出しますあなたが選択の最初のセルに555を持っている場合、次のようなものが得られます。 enter image description here

これは最良の選択肢ではありませんが、私がこれまで考えることができる最高の。そしてそれは動作します! :)

ロジックは、以下である - 各次数は、以下の式を有する第一のループのために以前よりも少なくとも50%小さい。

?1/2^n 

n= 1 
1/2^n = 0,5 

n= 2 
1/2^n = 0,25 

n= 3 
1/2^n = 0,125 

そして、我々は第二に、残りを再配布します同じ式を使用してループします。良い精度(16のような)で、私たちはまともな値を得る。

+0

うわー、ありがとう!私が予想していたよりも複雑です:) –

+0

@Ni_Ke - それはどのように動作するのですか? :) – Vityata