Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1952to1956
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA - kleinsten Wert ermitteln

VBA - kleinsten Wert ermitteln
14.11.2023 11:02:43
Fred
Hallo Excel-VBA Experten,
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

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - kleinsten Wert ermitteln
14.11.2023 11:11:49
onur
"ABER es funzt nicht. " ist genauso exakt wie beim Arzt die Aussage "ich habe Aua".
WAS "funzt" inwiefern nicht???
AW: VBA - kleinsten Wert ermitteln
14.11.2023 11:15:32
onur
"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. " ist Quatsch - wenn schon, dann eine Zahl grösser als 50 - z.B. 999. Sonst weisst du ja nicht, ob die 50 gefunden wurde oder von Anfang an da steht.
AW: VBA - kleinsten Wert ermitteln
14.11.2023 11:24:42
Fred
Hallo Onur,
"es funzt nicht": Die zB 999 wird immer dann durch das Makro in Spalte "V" eingetragen, wenn sich der gefundene Wert vom zuvor gefundenen Wert unterscheidet.
Das ist natürlich falsch ......
Anzeige
AW: VBA - kleinsten Wert ermitteln
14.11.2023 11:30:35
onur
Wo wird denn x wieder zurückgesetzt? Oder wird x immer grösser und grösser ?
AW: VBA - kleinsten Wert ermitteln
14.11.2023 11:41:29
Fred
Hallo Onur,
Durch Hinzufügen von "x = 0" habe ich nun "x" explizit zurückgesetzt.
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 = 999
x = 0 ' Zurücksetzen des Zählers für jede neue Zeile

For zz = z + 1 To lz
If Cells(zz, 8) = Cells(z, 8) Then
If Cells(zz, 20) = Cells(z, 20) Then

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

Cells(z, 22) = kleinsterWert
Next z
End Sub

aber es funzt nicht: Es wird immer wieder 999 angezeigt, wenn der darauffolgende gefundene Wert sich ändert.
:-(
Anzeige
AW: VBA - kleinsten Wert ermitteln
14.11.2023 11:48:28
onur
Du weisst, was das bedeutet?
            If Cells(zz, 8) = Cells(z, 8) Then

If Cells(zz, 20) = Cells(z, 20) Then

Wenn Zeile zz und Zeile z in Spalte H UND Spalte U übereinstimmen.
AW: VBA - kleinsten Wert ermitteln
14.11.2023 11:57:32
Fred
Hallo Onur,
auh Schei..
nun geändert:
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 = 999
x = 0 ' Zurücksetzen des Zählers für jede neue Zeile

For zz = z + 1 To lz
If Cells(zz, 8) = Cells(z, 8) Then

If Cells(zz, 20) kleinsterWert Then
kleinsterWert = Cells(zz, 20)
End If
End If

x = x + 1
If x = 5 Then Exit For

Next zz

Cells(z, 22) = kleinsterWert
Next z
End Sub


Es funzt (anscheinend)!!
Werde es an größeren Datenbestand testen.

Vielen vielen Dank für deine Aufmerksamkeit und bereitgestellte Kompetenz, Onur!


Gruss
Fred

Anzeige
Gerne !
14.11.2023 11:59:02
onur

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige