Besoin d'append un countur alors que la rangée suivante est plus grande ou plus petite

Sub HMM() Dim x As Integer Dim GG As Integer Dim Gr As Integer Dim rG As Integer Dim rr As Integer For x = 3 To x = 26126 If ActiveSheet.Cells(x, 3) > 0 And ActiveSheet.Cells(x + 1, 3) > 0 Then GG = GG + 1 End If If ActiveSheet.Cells(x, 3) > 0 And ActiveSheet.Cells(x + 1, 3) < 0 Then Gr = Gr + 1 End If If ActiveSheet.Cells(x, 3) < 0 And ActiveSheet.Cells(x + 1, 3) > 0 Then rG = rG + 1 End If If ActiveSheet.Cells(x, 3) < 0 And ActiveSheet.Cells(x + 1, 3) < 0 Then rr = rr + 1 End if Next x With ActiveSheet .Cells(2, 30) = GG .Cells(3, 30) = Gr .Cells(4, 30) = rG .Cells(5, 30) = rr End With End Sub 

J'ai donc une longue list de nombres allant de C3 à C26126. Ce que je dois faire, c'est savoir combien de fois un nombre positif précède un nombre positif (GG), combien de fois un nombre négatif précède un nombre positif (rG), etc. Donc, j'ai besoin de GG Gr rG et rr. Désolé si ce n'est pas assez clair.

Exemple: j'ai une table y: [-1,2,2,3, -1, -2,2] GG = 2, Gr = 1, rG = 2, rr = 1

Mon but ultime est de find un model markov caché simple pour mes séries chronologiques.

 Sub Tester() Dim pp, pn, np, nn, x, arr, v1, v2 arr = ActiveSheet.Range("C3:C1110").Value For x = 1 To UBound(arr, 1) - 1 v1 = arr(x, 1): v2 = arr(x + 1, 1) If v1 > 0 And v2 > 0 Then pp = pp + 1 ElseIf v1 > 0 And v2 < 0 Then pn = pn + 1 ElseIf v1 < 0 And v2 > 0 Then np = np + 1 ElseIf v1 < 0 And v2 < 0 Then nn = nn + 1 End If Next x Debug.Print pp, pn, np, nn End Sub 

Pas trop sûr de la question … puisque vous avez déjà donné une réponse

 Sub HMM() Dim myWS As Worksheet Set myWS = Worksheets("Sheet1") Dim x As Integer Dim GG As Integer Dim Gr As Integer Dim rG As Integer Dim rr As Integer 'Initially 0 by default but it's always good to be explicit GG = 0 Gr = 0 rG = 0 rr = 0 'Count from 3 to 26125 instead of from 3 to 26126 With myWS For x = 3 To 26125 If .Cells(x, 3).Value > 0 Then If .Cells(x + 1, 3).Value > 0 Then GG = GG + 1 ElseIf .Cells(x + 1, 3).Value < 0 Then Gr = Gr + 1 End If ElseIf .Cells(x, 3).Value < 0 Then If .Cells(x + 1, 3).Value > 0 Then rG = rG + 1 ElseIf .Cells(x + 1, 3).Value < 0 Then rr = rr + 1 End If End If Next x Debug.Print GG, Gr, rG, rr End With End Sub 

Si j'étais vous, je définirais .Cell (x + 1,3) à une variable puis je compare … Mais je ne savais pas quel type de variable je devrais utiliser puisqu'il y a une limite à tout.