Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1012to1016
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

Komplizierte Datenzusammenfassung mit Array

Komplizierte Datenzusammenfassung mit Array
29.09.2008 20:50:00
Der
Hallo liebe Excelianer,
ich wäre Euch sehr dankbar, wenn Ihr mir bei der Löung von folgendem Problem helft. Mir liegt eine Ergebnisliste einer Laufveranstaltung mit vielen Läufern nach Zeit sortiert vor. Ich benötige ein Makro, dass aus dieser Ergebnisliste die Mannschaften bildet. Zu einer Mannschaft gehören 3 Teilnehmer. Falls für einen Verein zum Beispiel 15 Läufer starten, bilden sich 5 Mannschaften.
Im Archiv gab es das Problem schon einmal ( https://www.herber.de/forum/archiv/812to816/t813814.htm
), allerdings benötige ich eine VBA-Lösung:
Ich möchte die Daten gerne in ein Array einlesen.
Beispiel:
In Spalte A steht der Name des Sportlers, in Spalte B sein Verein und in Spalte C seine Laufzeit.
Das Array würde ich gerne so füllen:
ArrMannschaften(1,1) = Verein
ArrMannschaften(1,2) = Name1
ArrMannschaften(1,3) = Zeit1
ArrMannschaften(1,4) = Name2
ArrMannschaften(1,5) = Zeit2
ArrMannschaften(1,6) = Name3
ArrMannschaften(1,7) = Zeit3
Mein Problem:
Wie bekomme ich es gelöst, dass
1. Excel für alle Mannschaften mit mind. 3 Teilnehmern die Daten wie oben in das Array schreibt
2. bei mehreren Mannschaften eines Vereins eine römische Zahl dahinter steht (Bsp: "SCC Berlin II", "SCC Berlin III", "SCC Berlin IV" usw.)
Für Lösungsvorschläge wäre ich Euch sehr dankbar!
Viele Grüße
Der Ratlose

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Komplizierte Datenzusammenfassung mit Array
29.09.2008 23:06:00
Daniel
Hi
und woran kann man erkennen, zu welcher Mannschaft ein Läufer gehört?
dh. wenn von einem Verein 6 Teilnehmer kommen, woran erkenn ich dann, ob das eine Mannschaft mit 6 Sportlern ist oder 2 Mannschaften mit jeweils 3.
Diese Informationen Fehlen noch in deinen Daten und Hellsehen kann auch VBA nicht.
Gruß, Daniel
AW: Komplizierte Datenzusammenfassung mit Array
30.09.2008 09:24:00
Martin
Hallo Daniel,
in Spalte B steht der Verein. Der Vereinsname ist gleichzeitig der Mannschaftsname. Entschuldigung, ich habe mich unglücklich ausgedrückt!
Viele Grüße
Martin
AW: Datenzusammenfassung mit Array
30.09.2008 09:03:00
Erich
Hallo Vorname(?),
der folgende Code setzt voraus, dass die Liste nach Vereinen sortiert vorliegt.
Wenn du die beiden Zeilen mit "evtl. aktivieren" aktivierst, werden die Mannschaften in Spalte D geschrieben.
Probier mal

Option Explicit
Sub Mannsch()
Dim lngZ As Long, zz As Long, lngM As Long, lngS As Long, arrM
lngZ = Cells(Rows.Count, 1).End(xlUp).Row
'   Range(Cells(2, 4), Cells(lngZ, 4)).ClearContents              ' evtl. aktivieren
For zz = 2 To lngZ - 2
If Cells(zz + 2, 2) = Cells(zz, 2) Then
lngM = lngM + 1
zz = zz + 2
End If
Next zz
ReDim arrM(1 To lngM, 1 To 7)
lngM = 0
For zz = 2 To lngZ - 2
If Cells(zz + 2, 2) = Cells(zz, 2) Then
lngM = lngM + 1
If lngM > 1 Then
If Cells(zz - 2, 2) = Cells(zz, 2) Then
lngS = lngS + 1
arrM(lngM, 1) = Cells(zz, 2) & " " & Application.Roman(lngS)
Else
arrM(lngM, 1) = Cells(zz, 2)
lngS = 1
End If
Else
arrM(lngM, 1) = Cells(zz, 2)
lngS = 1
End If
'         Range(Cells(zz, 4), Cells(zz + 2, 4)) = arrM(lngM, 1)   ' evtl. aktivieren
arrM(lngM, 2) = Cells(zz, 1)
arrM(lngM, 3) = Cells(zz, 3)
arrM(lngM, 4) = Cells(zz + 1, 1)
arrM(lngM, 5) = Cells(zz + 1, 3)
zz = zz + 2
arrM(lngM, 6) = Cells(zz, 1)
arrM(lngM, 7) = Cells(zz, 3)
End If
Next zz
End Sub

Und hier eine Beispielmappe: https://www.herber.de/bbs/user/55732.xls
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
P.S.: Ein Blick in die Forums-FAQ (speziell zum Thema Vornamen/NickNames) könnte nicht schaden.

Anzeige
AW: Datenzusammenfassung mit Array
30.09.2008 12:02:07
Der
Hallo Erich,
vielen lieben Dank. Dein Code funktioniert super. Die Funktion "Application.Roman" war mir bislang völlig unbekannt. Trotzdem gibt es ein kleines Problem: Die Teilnehmer im Protokoll sind nicht nach Verein, sondern nach Zeit sortiert. Siehst Du eine Möglichkeit, dass der Code auch funktioniert, wenn die Teilnehmer nicht nach Verein, sondern nach Zeit sortiert sind?
Viele liebe Grüße
Martin
AW: Datenzusammenfassung mit Array
30.09.2008 13:39:00
Erich
Hi Martin,
lassen sich die Quelldaten denn nicht nach Verein sortieren?
Man könnte das auch in einer Kopie machen und dann die Mannschaften aus der Kopie bestimmen.
Einfacher ist es wohl, die nach Zeit sortierten Quelldaten in ein Array einzulesen, das Array zu sortieren
und dann von diesem Array auszugehen.
Das tut folgender Code, der (wenn aktiviert) das Ergebnis in Tabelle2 ausgibt:

Sub Mannsch()
Dim lngZ As Long, arrW(), zz As Long, lngM As Long, lngS As Long, arrM, arrK
lngZ = Cells(Rows.Count, 1).End(xlUp).Row
arrW = Range(Cells(2, 1), Cells(lngZ, 3)) ' Quelldaten einlesen
lngZ = lngZ - 1
arrK = Array(2, 3)                        ' Sortkeys bestimmen
Call prcSort(arrK, arrW)                  ' Quellarray sortieren
For zz = 1 To lngZ - 2                    ' Anz. Mannschaften bestimmen
If arrW(zz + 2, 2) = arrW(zz, 2) Then
lngM = lngM + 1
zz = zz + 2
End If
Next zz
ReDim arrM(1 To lngM, 1 To 7)
lngM = 0
For zz = 1 To lngZ - 2
If arrW(zz + 2, 2) = arrW(zz, 2) Then
lngM = lngM + 1
If lngM > 1 Then
If arrW(zz - 2, 2) = arrW(zz, 2) Then
lngS = lngS + 1
arrM(lngM, 1) = arrW(zz, 2) & " " & Application.Roman(lngS)
Else
arrM(lngM, 1) = arrW(zz, 2)
lngS = 1
End If
Else
arrM(lngM, 1) = arrW(zz, 2)
lngS = 1
End If
arrM(lngM, 2) = arrW(zz, 1)
arrM(lngM, 3) = arrW(zz, 3)
arrM(lngM, 4) = arrW(zz + 1, 1)
arrM(lngM, 5) = arrW(zz + 1, 3)
zz = zz + 2
arrM(lngM, 6) = arrW(zz, 1)
arrM(lngM, 7) = arrW(zz, 3)
End If
Next zz
'evtl. aktivieren - Ausgabe in Tab2:
'   Sheets("Tabelle2").Cells(2, 2).Resize(lngM, 7) = arrM
End Sub

Die Sortroutine prcSort kopiere ich jetzt nicht hier in den Beitrag, sie ist von Nepumuk und steht in der Beispielmappe
https://www.herber.de/bbs/user/55748.xls
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
VIELEN DANK! So ist es perfekt!
30.09.2008 16:20:00
Der
Lieber Erich,
Du hast es genau so gemacht, wie ich es benötige. Vielen Dank!
Leider lassen sich die Quelldaten nicht vorher nach Verein sortieren, weil noch ein zweites Kriterium hinzukommt: Die Altersklassen. Die Mannschaftswertungen werden in das Alter der Teilnehmer unterteilt (Schüler B, Schüler A, Jugend B, Jugend A, usw.). Ich werde das Makro versuchen so anzuwenden, dass ich die jeweilige Altersklasse markiere und innerhalt der Markierung die Mannschaften zusammengestellt werden. Ich denke (und hoffe), dass ich die Umschreibung des Makros selber schaffe. Ich vermute, dass eine zusätzliche Berücksichtigung der Altersklasse zu kompliziert mit einem Makro zu lösen wäre, oder? Mit Deinem Makro hast Du mir schon sehr viel Handarbeit erspart! Nochmals eine dickes Dankeschön!!!
Viele Grüße
Martin
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige