Hallo Ihr VBA profis,
mein Problem ist folgendermassen: habe eine zeitreihe und das makro zählt wie oft die werte hintereinander konstant geblieben sind und gibt mir dann die 3 größten wieder. Beispiel: die 8 ist 5 mal hintereinander konstant geblieben und das nur 1 mal. daher die bezeichnung 1x5. die zahl 1 ist 4 mal hintereinander konstant geblieben und das nur 1 mal daher 1x4.
Und am ende möchte ich die drei größten aufgelistet haben. z.B in diesem falle:
1x5,1x4,2x3 . Hier haben wir haben wir 2x3 weil es zwei mal vorkommt, dass die zahl 3 mal hintereinander konstant geblieben ist. Den Code habe ich auch hinzugefügt jedoch komme ich mit der sortierung nicht ganz zurecht. Jede Hilfe ist dankend angenommen.
Zahlenreihe Häufigkeit*AnzahlKonstant Platzierung Ausgaben:
1 1x5,1x4,2x3
1
1
1
1 1x4 2
4
4 1x3 3
4
5
5
5
5 1x3 3
6
6 1x1 4
7
8
8
8
8
8
8 1x5 1
Function Parameter_P01(RICParameterSet, ToleranzParaRegelCell, BerechnungRoh, lastRowmyRange, Steuerung, ParameterSet, i, myRange, myRangeAbs, myRangeRel, P01, P02, P03, P04, P05, P06, P07)
'**********************
'P01
'**********************
Dim AnzahlKonstantMAX As Integer
'Hier die Spalte gesucht ung gefunden um später die Parmeter in die richtige Spalte reinzuschreiben
P01MaxKonstColumn = WorksheetFunction.Match("MAX_KONSTANT", ParameterSet.Range("A1:AM1"), 0)
'Hier werden vorab die jeweilige Zelle im SHeet ParameterSet für den Max und Min parameter lokalisiert um es später einzutragen
Set P01MaxKonstEintrag = ParameterSet.Cells(i, P01MaxKonstColumn)
AnzahlKonstant = 0
AnzahlKonstantMAX = 0
For i = lastRowmyRange To 6 Step -1 ' mit Step -1 geht man in der Anzahl von oben nach unten
Wert = BerechnungRoh.Rows(i).Columns("B")
Wert_1 = BerechnungRoh.Rows(i - 1).Columns("B")
'hier wird gezählt wie oft der RIC hintereinander konstant geblieben ist.
If Wert = Wert_1 Then
AnzahlKonstant = AnzahlKonstant + 1 'Hier wird erst einmal hochgezäglt wie oft der RIC hintereinander kosntant geblieben ist.
If AnzahlKonstant > AnzahlKonstant3MAX Then 'Hier wird dann geschaut, ob die hintereinadner kosntantgebliebene Anzahl die bereits hochgezählte kostantanzahl übetsteigt. Wenn ja, wird es registriert.
If AnzahlKonstant > AnzahlKonstant2MAX Then
If AnzahlKonstant > AnzahlKonstant1MAX Then
'AnzahlKonstant2MAX = AnzahlKonstant1MAX 'wenn 3max ereicht ist, dann ist der vorherige 3max jetz tder 2th größte
AnzahlKonstant1MAX = AnzahlKonstant 'und der neue ist der größte
ElseIf AnzahlKonstant = AnzahlKonstant1MAX Then
Anzahl1Max = Anzahl1Max + 1
Else: AnzahlKonstant2MAX = AnzahlKonstant 'wenn es größer als Max2 ist aber kleiner als Max1, dann muss es max2 sein
End If
ElseIf AnzahlKonstant = AnzahlKonstant2MAX Then
Anzahl2Max = Anzahl2Max + 1
Else: AnzahlKonstant3MAX = AnzahlKonstant 'wenn es nicht größer als Max2 ist, dann muss es der 3th größte
End If
ElseIf AnzahlKonstant = AnzahlKonstant3MAX Then
Anzahl3Max = Anzahl3Max + 1 'Zählt dieanzahl, wie oft Max3 getroffen erreicht wurde
End If
Else: AnzahlKonstant = 0
End If
Next i
If AnzahlKonstant1MAX < ToleranzParaRegelCell Then
P01MaxKonstEintrag.Value = AnzahlKonstantMAX
Else: P01MaxKonstEintrag.Value = "Anzahl: #" & AnzahlKonstant1MAX & "t=" & Anzahl1Max & ";#" & AnzahlKonstant2MAX & "t=" & Anzahl2Max & ";#" & AnzahlKonstant3MAX & "t=" & Anzahl3Max
End If
|