VBA - kleinsten Wert ermitteln
14.11.2023 11:02:43
Fred
ich habe ein Makro erhalten, was als Referenz für ein anderes herhalten soll.
Sub anzahl5()
' WICHTIG !!! Es müssen die Spiele abwärts (Datum) sortiert sein
' Kriterium REMIS
' zählt die Anzahl (wenn Kriterium erfüllt) eines Heimteams in Heimspielen
' der NÄCHSTEN 5 Spiele
Dim z, anz, lz, zz, anf, x
anf = 3 ' ab Zeile 3
lz = ActiveSheet.Cells(Rows.count, 1).End(xlUp).Row 'bezieht sich auf HeimTeams, Spalte 8
For z = anf To lz ' von Zeile 3 bis letzte
anz = 0: x = 0 ' Zähler auf Null zu Beginn
For zz = z + 1 To lz ' relevant, die nächsten 5 Spiele mit Heimteam
If Cells(zz, 8) = Cells(z, 8) Then
If Cells(zz, 20) = Cells(zz, 20) Then anz = anz + 1 ' zählt, wenn REMIS
x = x + 1: If x = 5 Then Exit For
End If
Next zz
Cells(z, 21) = anz 'trägt die Anzahl in Spalte 21 ein
Next z
End Sub
Dieses Makro geht in Spalte "H" ab Zeile 3 bis letzte Zeile durch, prüft ob aktueller Zeilenwert bis zu 5x in entsprechender Spalte vorhanden ist und trägt in jeder aktuellen Zeile entsprechend die Anzahl in Spalte 21 ("U") ein. - Klappt!
Nun möchte ich dieses Makro dahin ändern, dass nicht die Anzahl (der max. 5 Werte) ermittelt wird, sondern der kleinste Wert (der max. 5 Werte).
Mein Ansatz:
Der kleinsterWert wird zu Beginn jeder Iteration auf einen großen Wert gesetzt und nur aktualisiert, wenn ein kleinerer Wert gefunden wird.
Makro:
Sub kleinsterWert5()
Dim z, lz, zz, anf, x
Dim kleinsterWert As Double
anf = 3 ' ab Zeile 3
lz = ActiveSheet.Cells(Rows.count, 1).End(xlUp).Row ' bezieht sich auf HeimTeams, Spalte 8
For z = anf To lz ' von Zeile 3 bis letzte
kleinsterWert = 50 ' Initialisierung mit höchstem möglichen Wert
For zz = z + 1 To lz
If Cells(zz, 8) = Cells(z, 8) Then
If Cells(zz, 20) = Cells(z, 20) Then
' Wenn der aktuelle Wert in Spalte "T" kleiner ist als der bisher kleinste Wert
If Cells(zz, 20) kleinsterWert Then
kleinsterWert = Cells(zz, 20)
End If
End If
x = x + 1
If x = 5 Then Exit For
End If
Next zz
' Den kleinsten Wert in Spalte "V" eintragen
Cells(z, 22) = kleinsterWert
Next z
End Sub
Die Initialisierung mit einem Wert (50) soll ja eine gängige Praxis sein, um sicherzustellen, dass der erste gefundene Wert automatisch als der kleinste betrachtet wird.
ABER es funzt nicht.
Kann ein Experte bitte mal auf die Beispielmappe schauen und mir eventuell eine LÖsung anbieten?!
https://www.herber.de/bbs/user/164257.xlsb
Gruss
Fred