Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Führungswechsel zählen

Forumthread: Führungswechsel zählen

Führungswechsel zählen
09.09.2024 12:49:57
Fred
Hallo Excel Experten,
mal wieder so ein Ding, mit dem ich mich seit 2 Stunden befasse:
In meiner formatierten Tabelle "tab_Liga" in Sheets("Liga") ist u.a.
Spaltentitel: "Chronologie"
Die enthaltenen Werte, Beispiele:
1-0, 1-1, 2-1, 3-1, 3-2, 4-2
0-1, 0-2, 1-2, 2-2, 3-2
1-0, 1-1, 1-2, 1-3
1-0
oder Leerzelle
Ich möchte nun feststellen, wie oft ein "kompletter Fürhrungswechsel) statt fand.
Beispiel aus Chronologie:
1-0, 1-1, 1-2, 1-3
Hier hat die Führung 1x komplett gewechselt
Ergebnis: 1
__________________

0-1, 1-1, 2-1, 2-2, 2-3, 2-4, 3-4
Hier hat die Führung 2x gewechselt
Ergebnis: 2

Mein bisheriges Makro:
Sub Führungswechsel()

Dim ws As Worksheet
Dim tbl As ListObject
Dim Chronologie As Range
Dim Führungswechsel As Range
Dim Zelle As Range
Dim VorherigeFührung As String
Dim AktuelleFührung As String
Dim WechselCount As Long
Dim HeimTeam As Double
Dim GastTeam As Double
Dim VorherigeHeimTeam As Double
Dim VorherigeGastTeam As Double
Dim i As Long
Dim FührendeMannschaftVorher As String
Dim FührendeMannschaftAktuell As String
Dim Spielstände() As String


Set ws = ThisWorkbook.Sheets("Liga")
Set tbl = ws.ListObjects("tab_Liga")


Set Chronologie = tbl.ListColumns("Chronologie").DataBodyRange
Set Führungswechsel = tbl.ListColumns("Führungswechsel").DataBodyRange

' Schleife durch jede Zelle in der Spalte "Chronologie"
For Each Zelle In Chronologie
VorherigeFührung = ""
WechselCount = 0

' Split Chronologie in Einzelspielstände
Spielstände = Split(Zelle.Value, ", ")

' Schleife durch jeden Spielstand
For i = LBound(Spielstände) To UBound(Spielstände)
AktuelleFührung = Spielstände(i)

' Bestimme die Führung (Heim oder Gast)
HeimTeam = val(Split(AktuelleFührung, "-")(0))
GastTeam = val(Split(AktuelleFührung, "-")(1))

' Bestimme die führende Mannschaft
If HeimTeam > GastTeam Then
FührendeMannschaftAktuell = "Heim"
ElseIf HeimTeam GastTeam Then
FührendeMannschaftAktuell = "Gast"
Else
FührendeMannschaftAktuell = "Unentschieden"
End If

' Überprüfe, ob es einen Führungswechsel gab
If VorherigeFührung > "" Then
' Bestimme die führende Mannschaft in der vorherigen Phase
If VorherigeHeimTeam > VorherigeGastTeam Then
FührendeMannschaftVorher = "Heim"
ElseIf VorherigeHeimTeam VorherigeGastTeam Then
FührendeMannschaftVorher = "Gast"
Else
FührendeMannschaftVorher = "Unentschieden"
End If

' Prüft, ob die Führung gewechselt hat
If FührendeMannschaftAktuell > FührendeMannschaftVorher And _
FührendeMannschaftAktuell > "Unentschieden" And _
FührendeMannschaftVorher > "Unentschieden" Then
WechselCount = WechselCount + 1
End If
End If

' Setze die aktuelle Führung als vorherige Führung für die nächste Iteration
VorherigeFührung = AktuelleFührung
VorherigeHeimTeam = HeimTeam
VorherigeGastTeam = GastTeam
Next i

Führungswechsel(Zelle.row - Chronologie.row + 1).Value = WechselCount
Next Zelle
End Sub

Idee war, die Unentschieden zu identifizieren und den vorherigen und folgenden Wert zu vergleichen.
Ist aber Panne!
Ergebnis: überall 0
https://www.herber.de/bbs/user/172094.xlsb

Kann bitte ein Experte mal draufschaun und mir eine Lösung vorschlagen?!

Gruss
Fred

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Führungswechsel zählen
09.09.2024 13:46:48
Onur
In deiner Datei sehe ich nirgends sowas wie
"1-0, 1-1, 2-1, 3-1, 3-2, 4-2 ".
AW: Führungswechsel zählen
09.09.2024 14:50:46
daniel
Hi
ich würde das als Funktion schrieben, die du dann in die Tabelle einfügen kannst, also in einer Spalte: =Führungswechsel([@Chronologie])

der Code für die Funktion ist:
Function FührungsWechsel(txt As String) As Long

Dim x
Dim y
Dim z1 As String, z2 As String

Dim i As Long
txt = Replace(txt, " ", "")
x = Split(txt, ",")
Select Case x(0)
Case "1-0": z1 = "H"
Case "0-1": z1 = "G"
Case Else
End Select

For i = 1 To UBound(x)
y = Split(x(i), "-")
If y(0) > y(1) Then
z2 = "H"
ElseIf y(1) > y(0) Then
z2 = "G"
Else
z2 = z1
End If

If z1 > z2 Then
FührungsWechsel = FührungsWechsel + 1
z1 = z2
End If
Next

End Function


Gruß Daniel
Anzeige
AW: Führungswechsel zählen
09.09.2024 15:16:39
Fred
Hallo Daniel,
das ist auch cool!
Ich habe schon öfters daran gedacht, Ergebnisse durch UDF's zu erzielen.
Ist aber wohl wieder eine ganz andere Liga.

Vielen Dank!!

Gruss
Fred

AW: Führungswechsel zählen
09.09.2024 15:39:20
daniel
hi
nö, ist eigentlich die selbe Liga.
die Berechnungen, die man machen muss, sind ja die gleichen.
Die Unterschiede bestehen darin, wie man die Ausgabe der Ergebnisse programmiert.
Funktionen kann ich halt einfach per Formel in eine Tabellenspalte einfügen und den Rest erledigt Excel dann automatisch.
bei Makros muss immer auch noch programmieren, dass die Tabelle befüllt wird.
Gruß Daniel
Anzeige
AW: Führungswechsel zählen
09.09.2024 13:59:04
Fred
Hallo Großmeister,
war nur ein erfundenes Beispiel.
In der Mappe steht in "AH17" z.B.
0-1, 1-1, 2-1, 2-2
es hat 1 Führungswechsel gegeben.

in "AH18"
1-0, 1-1, 1-2
1 Führungswechsel

in "AH28"
1-0, 2-0, 2-1, 3-1
0 Führungswechsel

in "AH47"
1-0, 1-1, 1-2, 1-3
1 Führungswechsel
Anzeige
AW: Führungswechsel zählen
09.09.2024 14:41:37
Onur
Du solltest in VBA möglichst keine Umlaute in Variablenname benutzen, es kann Probleme machen.
AW: Führungswechsel zählen
09.09.2024 15:12:56
Fred
Hallo Onur,
ganz großer Sport!!!
meinen ursprünglichen Roman - der nicht das gewünschte Ergebnis lieferte - sofort in den Müll geworfen.
Dein Ansatz, den Spielstand in Heim- und Gast-Tore aufzuteilen und dann die Führung (Heim oder Gast) über die Zeichenkette A und B zu verfolgen, ist clever und echt effizient.
Wenn ich das so richtig sehe, iterierst du über die Zeilen von AH11 bis AH1000, wobei nur die Zeilen bearbeitet werden, die nicht leer sind. Dann teilst du die Spielstände in Heim- und Gast-Tore auf.
Dann wird die Führung ermittelt. Wenn das Gastteam mehr Tore hat, fügst du B zur Zeichenkette hinzu, ansonsten A
Daraufhin werden die Führungswechsel gezählt, in dem du das letzte Zeichen in der Zeichenkette mit dem aktuellen Spielstand vergleichst und zählst die Führungswechsel.(immer, wenn sich A in B ändert oder umgekehrt).

Habe nun nur noch kleine Anpassung des Makro eingesetzt, so das sich das Makro nur auf die tatsächlich vorhandenen Daten bezieht und es arbeitet direkt mit den Spalten "Chronologie" und "Führungswechsel".

Sub Führungswechsel()

Dim ws As Worksheet
Dim tbl As ListObject
Dim Chronologie As Range
Dim Führungswechsel As Range
Dim Zelle As Range
Dim str As String
Dim x As Variant
Dim x1 As Long, x2 As Long
Dim xx As Variant
Dim st As String
Dim i As Long, z As Long


Set ws = ThisWorkbook.Sheets("Liga")
Set tbl = ws.ListObjects("tab_Liga")


Set Chronologie = tbl.ListColumns("Chronologie").DataBodyRange
Set Führungswechsel = tbl.ListColumns("Führungswechsel").DataBodyRange


For z = 1 To Chronologie.Rows.count
If Chronologie.Cells(z, 1).Value > "" Then

If Trim(Chronologie.Cells(z, 1).Value) = "0-0" Then
Führungswechsel.Cells(z, 1).Value = 0
Else
str = ""
x = Split(Chronologie.Cells(z, 1).Value, ",")
For i = 0 To UBound(x)
xx = Split(x(i), "-")
x1 = CInt(xx(0))
x2 = CInt(xx(1))
st = "A": If x2 > x1 Then st = "B"
If x1 > x2 And st > Right(str, 1) Then str = str & st
Next i
Führungswechsel.Cells(z, 1).Value = Len(str) - 1
End If
End If
Next z
End Sub


Ganz GROßE KLASSE, Onur !!!
Ich verstehe diese Einfachheit eines Codes noch nicht ganz,- werde ihn mir noch genauer ansehen.

Vielen Dank für deine bereitgestellte Kompetenz!!

Gruss
Fred


Anzeige
Gerne !
09.09.2024 15:14:20
Onur
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige