この種の問題には、有限状態マシンを少し設定する必要があります.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)),"")
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
ありがとうございました。私は最初に私の目標を述べていないと思う。私は州が連続的であることを望んでいる。私が意味するのは、州1が過収保状態の最初の例に対するアンダーベット状態の最初の例であるということです。状態2は、過収状態の次の第1のインスタンスに対するアンダーベット状態の次の第1のインスタンスである。このパターンは何も残らないまでワークシートを通って運ばれました。私は7-15州の合計があると仮定します。したがって、3つの状態と3つの式の間の計算式を持つ代わりに、各状態にユニークな –
の番号を割り当てることは可能ですか?再び、これに取り組む時間を取ってくれてありがとう! –
ここは湿った一日で、正直なところで起きていることはあまりないので、私のVBAを練習する良い機会です。事は状態が1から2から3へ、そして1から1へと循環することですが、周期数が1ずつ増加するので、任意の数の期間(実際のデータでは2つしか扱えない)を処理できるはずです。調整が必要な場合は、期間終了時に国が1に戻っていることです。期限が過ぎた株式で終わるので、多分2にする必要があります。そのため、次回の下落はおそらく新しい期間を引き起こすはずです。 –