2017-01-14 5 views
0

この質問のタイトルは、どのように置くのが最適かわかりません。私は私の質問を写真で以下に説明することができると信じています。2つのセルからの値に基づいて2つのセル値を減算する動的式

これはあまりにも式のために要求及びIは、値の2列の範囲を解析式を生成したいVBAが

コーディング必要とすることができます。最初の列は株式の調整終値です。第2の列は、過剰及び下劣状態を予測することを目的とした計算された発振器である。

この計算式では、計算されたオシレータが30を下回っており、80を超えると買い過ぎると、在庫は未収入とみなされます。したがって、最初の未収金の発生と次のインスタンスの終値価格の差を計算します。過剰買取。

この式は、その年の株価のすべてのインスタンスをループします。理論的には、株式が買い倒されて買収されたときに何度も繰り返されます。

私はこれらの範囲を本質的にピリオドで考える。期間の開始は、過払額の最後のインスタンスに続く不履行数の最初のインスタンスです。期間の終わりは、次回の買い越し額です。

在庫が不足している/超過している日数は大きく変動するため、動的な公式である必要があります。

Iveはネストされたifとchoose文を使用すると考えていましたが、十分に頑強なものを思いつきません。誰かがこれを達成するためにどのような機能を使って正しい方向に向かうことができますか?これはVBAを必要とするものでしょうか?私は

enter image description here

をしたいと思っ何の

例読み、これに考えるために時間を割いていただき、ありがとうございます。私があなたのために何かを明確にすることができたら教えてください。

答えて

0

この種の問題には、有限状態マシンを少し設定する必要があります.VBAまたはヘルパー列を使用するかどうかは関係ありません。

そこで三つの状態

(1)初期状態

(2) 'プライム' 状態

(3)期間の状態で

三遷移

あります(A)買物在庫が見つかったときの(1)から(2)まで

(B)次の買物在庫が見つかったとき(2)から(3)まで

(C)次の買物在庫が見つかった時から(1)に戻る。

だから、式I3(例えば)で始まる

=IF(AND(I2=1,H3>80),2,IF(AND(I2=2,H3<30),3,IF(AND(I2=3,H3>80),1,I2))) 

(I2が1に設定されている)を含むこれらの状態と遷移を処理するための列を設定する必要があります。

はその後、期間終了をカウントするために、2つの以上のヘルパーの列を必要と見つけることの違い

=IFERROR(INDEX(G$2:G$100,MATCH(ROWS(L$1:L1),J$2:J$100,0))-INDEX(G$2:G$100,MATCH(ROWS(L$1:L1),K$2:K$100,0)),"") 

enter image description here

VBAをピックアップして

=IF(AND(I1=2,I2=3),MAX(J$1:J1)+1,"") 

=IF(AND(I1=3,I2=1),MAX(K$1:K1)+1,"") 

そして最後に列を開始しますn番目の期間の差は次のようになります - これはI2で始まるようなものです。

=IFERROR(stock(G$2:G$100,H$2:H$100,ROWS(N$1:N1)),"") 

ですので、数式を下に引くと、次の期間が検索されます。

Option Explicit 

Function Stock(Actual As Range, Predicted As Range, n As Integer) As Variant 

Dim i, rows, LastRow, period As Long 
Dim state As Integer 
Dim startFound, endFound As Boolean 
Dim actualValue, predictedValue, startValue, endValue As Double 

state = 1 
period = 0 
startFound = False 
endFound = False 
rows = Actual.rows.Count 
If rows <> Predicted.rows.Count Then 
    Stock = CVErr(xlErrValue) 
    Return 
End If 

For i = 1 To rows 
    actualValue = Actual.Cells(i, 1).Value 
    predictedValue = Predicted.Cells(i, 1).Value 

    If state = 1 And predictedValue > 80 Then 
     state = 2 
    Else 
     If state = 2 And predictedValue < 30 Then 
      state = 3 
      period = period + 1 
      If period = n Then 
       startValue = actualValue 
       startFound = True 
      End If 
     Else 
      If state = 3 And predictedValue > 80 Then 
       state = 1 
       If period = n Then 
        endValue = actualValue 
        endFound = True 
        Exit For 
       End If 
      End If 
     End If 
    End If 

Next I 

If startFound And endFound Then 
    Stock = startValue - endValue 
Else 
    Stock = CVErr(xlErrValue) 
End If 
End Function 
+0

ありがとうございました。私は最初に私の目標を述べていないと思う。私は州が連続的であることを望んでいる。私が意味するのは、州1が過収保状態の最初の例に対するアンダーベット状態の最初の例であるということです。状態2は、過収状態の次の第1のインスタンスに対するアンダーベット状態の次の第1のインスタンスである。このパターンは何も残らないまでワークシートを通って運ばれました。私は7-15州の合計があると仮定します。したがって、3つの状態と3つの式の間の計算式を持つ代わりに、各状態にユニークな –

+0

の番号を割り当てることは可能ですか?再び、これに取り組む時間を取ってくれてありがとう! –

+0

ここは湿った一日で、正直なところで起きていることはあまりないので、私のVBAを練習する良い機会です。事は状態が1から2から3へ、そして1から1へと循環することですが、周期数が1ずつ増加するので、任意の数の期間(実際のデータでは2つしか扱えない)を処理できるはずです。調整が必要な場合は、期間終了時に国が1に戻っていることです。期限が過ぎた株式で終わるので、多分2にする必要があります。そのため、次回の下落はおそらく新しい期間を引き起こすはずです。 –

関連する問題