Dinamikus formula, amely kivonja 2 cellaértékek értékek alapján a 2 más sejtek

szavazat
0

Én küzd jön egy címet az a kérdés, én vidám kitalálni, hogyan lehet a legjobban fogalmazott. Azt hiszem, képes lesz megmagyarázni a kérdést jobban alábbi képekkel.

Ez is lehet túl igényes egy általános képletű, és szükség van VBA kódolás

Szeretnék, hogy létrehoz egy általános képletű, amely elemzi egy sor 2 oszlopok az értékek. Az első oszlop a korrigált záróár a raktáron. A második oszlop számított oszcillátor célzó előre újra és underbought állapotát.

Ebben a képletben a készlet tartják underbought, ha a számított oszcillátor 30 alatt van és túladott, ha ez a fenti 80. Ezért szeretnék számítani a záró ára közötti árkülönbség az első előfordulása underbought és a következő pillanatban a túladott.

Aztán szeretné ezt a képletet végiglépkedünk összes példányát a részvény ára az év során. Elméletileg nem lesz többször, ha az állomány ounderbought és túladott.

Azt hiszem, ezen tartományok időszakokban alapvetően. Az az időszak kezdete az első fokon egy underbought szám az utolsó fokon egy overbought értéket. Az időszak végén a következő overbought értéket.

A napok száma az állomány underbought / túladott mozog majd vadul, ezért ezt kell egy dinamikus képlet.

Ive úgy használja beágyazott ha és válassza nyilatkozatok, de én vidám jön valami robusztus elég. Tudna valaki nekem pont a helyes irányba, hogy milyen funkciót kell használni, hogy ezt a? Ez a valami, hogy lesz szükség VBA?

Példája annak, amit szeretnék csinálni

írja

Köszönjük, hogy időt olvasni és gondolkodni ezen. Kérem, tudassa velem, ha tudok tisztázni semmit.

A kérdést 14/01/2017 16:27
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
0

Be kell, hogy hozzanak létre egy kis véges állapotú gép ez a fajta probléma, és nem számít, ha a VBA vagy helper oszlopokat.

Tehát három állam

(1) Kezdeti állapot

(2) 'alapozóval bevont' állapotban

(3) A időszakban állapotban

és három átmenetek

(A) (1) (2), amikor overbought állomány talált

(B) (2) a (3), amikor a következő underbought állomány talált

(C) (3) vissza a (1), amikor a következő overbought állomány talált.

Így meg kell, hogy hozzanak létre egy oszlopot kell kezelni az ilyen állapotok és átmenetek képletet tartalmazó

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

kiindulási (mondjuk) I3 (I2 értéke 1).

Akkor meg kell még két segítő oszlopok számolni az időszak véget ér, és elkezdődik

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

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

És végül egy oszlopot, hogy vegye fel a különbségeket

=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)),"")

írja kép leírása itt

A VBA megtalálni a különbség az n-edik időszakban nézne az alábbiak szerint - akkor hívja ezt így kezdő (mondjuk) I2

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

így, ahogy húzza a képlet le fog keresni a következő időszakban.

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
Válaszolt 15/01/2017 11:04
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more