Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1588to1592
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

Mehrere Tabellen zusammenführen

Mehrere Tabellen zusammenführen
01.11.2017 14:44:13
KLE
Hallo zusammen,
...ich war schon sehr lange nicht mehr mit Excel am Werk. Nun habe ich eine Herausforderung und brauche dafür eine Starthilfe. Es geht um folgendes:
Handball-Statistik
Ich bin nach über 20 Jahren wieder seit diesem Monat als B-Jugend-Trainer im Handball aktiv. Die Liga gibt zwar Statistiken raus, aber nur einzeln.
Um aber effektiv damit arbeiten zu können, suche ich nun eine Lösung, wie ich diese Tabellen (rein kopiert in Excel) auf einem Blatt zusammenführen kann. Dies auch per VBA, wenn es keine "Funktion" dafür gibt.
Das Problem: Die Tabellen sind nicht Deckungsgleich und müssen einzeln ausgelesen
und zusammengeführt werden. Aber wie? Probiere es schon seit 3-4 Tagen...
Mustertabelle: Liegt hier mit bei.
https://www.herber.de/bbs/user/117349.xlsx
Schaut es Euch doch bitte einmal an. Sicher hat jemand eine schnelle Lösung für mich! Das wäre super!!! ;o)
Ich danke Euch - auch im Namen meiner Jungs - für Eure Unterstützung!
Sonnige Grüße Kay

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: weiter geht es im thread oben drüber owT
01.11.2017 15:53:58
...
Gruß Werner
.. , - ...
AW: Mehrere Tabellen zusammenführen
01.11.2017 16:32:59
Daniel
Hi
das ganze funktioniert ohne Makro so:
1. kopiere jeden Namen und Verein aus jeder Teilliste und füge sie unter jeder anderen Teilliste wieder ein (dh unter jeder Teilliste sollten alle vorkommenden Namen aufgeführt sein)
2. führe jetzt mit jeder Teilliste die Funktionen DATEN -DATENTOOLS - DUPLIAKTE ENTFERNEN aus (mit Name und Verein nach als Kriterium)
3. Sortiere jede Teillliste nach Name und Verein
jetzt steht in jeder Teilliste jeder Name in der gleichen Zeile und du kannst die Zwischenzeilen löschen.
das gleiche macht im Prinzip dieser Code (passend für deine Beispieldatei im Blatt "Daten")
achtung, die Daten werden überschrieben, also bitte vorher das Blatt kopiernen für den Fall das es schief geht.
Die Rangbilung und die gewünschte Sortierung überlass ich dir.
Sub test()
Dim i As Long
Dim Tabellen As Range
Set Tabellen = Sheets("Daten").Rows(2).SpecialCells(xlCellTypeConstants)
'--- alle Namen im erster Tabelle zusammenfassen
For i = 2 To Tabellen.Areas.Count
With Tabellen.Areas(i)
Range(.Offset(1, 0), .End(xlDown)).Resize(, 3).Copy
End With
Tabellen.Areas(1).Cells(1, 1).End(xlDown).Offset(1, 0).PasteSpecial xlPasteAll
Next
'--- alle Namen unter allen Tabellen einfügen
With Tabellen.Areas(1)
Range(.Offset(1, 0), .End(xlDown)).Resize(, 3).Copy
End With
For i = 2 To Tabellen.Areas.Count
Tabellen.Areas(i).Cells(1, 1).End(xlDown).Offset(1, 0).PasteSpecial xlPasteAll
Next
'--- Duplikate entfernen und sortieren
For i = 1 To Tabellen.Areas.Count
With Tabellen.Areas(i)
With Range(.Cells(2, 1), .Cells(1, 1).End(xlDown)).Resize(, .Columns.Count)
.RemoveDuplicates Array(2, 3), xlNo
.Sort key1:=.Cells(1, 3), order1:=xlAscending, key2:=.Cells(1, 2), order2:= _
xlAscending, Header:=xlNo
End With
End With
Next
'--- nicht mehr benötigte Spalten löschen
For i = 2 To Tabellen.Areas.Count
Tabellen.Areas(i).Offset(0, -1).Resize(, 4).EntireColumn.Delete
Next
'--- Formatieren
With Sheets("Daten")
With Range(.Cells(3, 1), .Cells(2, 1).End(xlDown)).Resize(, .Cells(2, 1).End(xlToRight). _
Column)
.Select
.Interior.Color = vbWhite
.Borders(xlInsideHorizontal).ColorIndex = 15
.Borders(xlInsideHorizontal).Weight = xlThin
End With
End With
End Sub
Gruß Daniel
ps: noch ein Hinweis, die Zeilenumbrüche im Code (die Stelle mit dem Unterstrich) musst du ggf entfernen, so dass die ganze Zeile in einer Zeile steht)
diese werden vom Forumsedtior automatisch eingefügt, wenn ihm die Codezeile zu lang erscheint.
nur ist dieser Zeilenumbruch nicht kompatibel mit dem, was der VBA-Edtior benötigt, daher muss man sie entfernen.
Anzeige
AW: Mehrere Tabellen zusammenführen
01.11.2017 17:10:26
Christian
hallo Kay,
hier mein Vorschlag:
... denn Onur überschreibt die Quell-Daten und Daniel hat 5 Datensätze vergessen...
Sind bei mir auch Fehler drin? Will ich nicht ausschließen - bitte testen.
Grüße
Christian
Option Explicit
Sub TestIt()
Dim i As Long, lngLR As Long
Dim objDic As Object
Dim strKey As String
Dim vntRes(), vntKey
Set objDic = CreateObject("SCripting.Dictionary")
With ThisWorkbook.Sheets("Daten")
For i = 3 To .Cells(.Rows.Count, 2).End(xlUp).Row
strKey = .Cells(i, 2) & "|" & .Cells(i, 3)
ReDim vntRes(11)
vntRes(0) = .Cells(i, 5)                        ' Spiele
vntRes(1) = .Cells(i, 4)                        ' Tore
vntRes(2) = .Cells(i, 6)                        ' Tore/Spiel
objDic(strKey) = vntRes
Next
For i = 3 To .Cells(.Rows.Count, 9).End(xlUp).Row
strKey = .Cells(i, 9) & "|" & .Cells(i, 10)
If objDic.Exists(strKey) Then
vntRes = objDic(strKey)
vntRes(3) = vntRes(3) + .Cells(i, 11)       ' 7-Meter-Tore
vntRes(4) = vntRes(4) + .Cells(i, 12)       ' 7-Meter-Versuche
vntRes(5) = vntRes(5) + .Cells(i, 13)       ' 7-Meter-Trefferquote
objDic(strKey) = vntRes
Else
ReDim vntRes(11)
vntRes(3) = vntRes(3) + .Cells(i, 11)       ' 7-Meter-Tore
vntRes(4) = vntRes(4) + .Cells(i, 12)       ' 7-Meter-Versuche
vntRes(5) = vntRes(5) + .Cells(i, 13)       ' 7-Meter-Trefferquote
objDic(strKey) = vntRes
End If
Next
For i = 3 To .Cells(.Rows.Count, 17).End(xlUp).Row
strKey = .Cells(i, 17) & "|" & .Cells(i, 18)
If objDic.Exists(strKey) Then
vntRes = objDic(strKey)
vntRes(6) = vntRes(6) + .Cells(i, 20)       ' Gelbe-Karten
vntRes(7) = vntRes(7) + .Cells(i, 19)       ' Gelbe-Karten/Spiel
objDic(strKey) = vntRes
Else
ReDim vntRes(11)
vntRes(0) = .Cells(i, 21)                   ' Spiele
vntRes(6) = .Cells(i, 20)                   ' Gelbe-Karten
vntRes(7) = .Cells(i, 19)                   ' Gelbe-Karten/Spiel
objDic(strKey) = vntRes
End If
Next
For i = 3 To .Cells(.Rows.Count, 34).End(xlUp).Row
strKey = .Cells(i, 34) & "|" & .Cells(i, 35)
If objDic.Exists(strKey) Then
vntRes = objDic(strKey)
vntRes(8) = vntRes(8) + .Cells(i, 37)       ' Rote-Karten
vntRes(9) = vntRes(9) + .Cells(i, 36)       ' Rote-Karten/Spiel
objDic(strKey) = vntRes
Else
ReDim vntRes(11)
vntRes(0) = .Cells(i, 38)                   ' Spiele
vntRes(8) = .Cells(i, 37)                   ' Rote-Karten
vntRes(9) = .Cells(i, 36)                   ' Rote-Karten/Spiel
objDic(strKey) = vntRes
End If
Next
For i = 3 To .Cells(.Rows.Count, 24).End(xlUp).Row
strKey = .Cells(i, 24) & "|" & .Cells(i, 25)
If objDic.Exists(strKey) Then
vntRes = objDic(strKey)
vntRes(10) = vntRes(10) + .Cells(i, 27)     ' Zeitstrafen
vntRes(11) = vntRes(11) + .Cells(i, 26)     ' Zeitstrafen/Spiel
objDic(strKey) = vntRes
Else
ReDim vntRes(11)
vntRes(0) = .Cells(i, 31)                   ' Spiele
vntRes(10) = .Cells(i, 27)                  ' Zeitstrafen
vntRes(11) = .Cells(i, 26)                  ' Zeitstrafen/Spiel
objDic(strKey) = vntRes
End If
Next
End With
i = 6
Application.ScreenUpdating = False
With ThisWorkbook.Sheets("Statistik")
lngLR = .Cells(.Rows.Count, 3).End(xlUp).Row
.Cells(6, 2).Resize(lngLR, 15).ClearContents
For Each vntKey In objDic.Keys
.Cells(i, 3).Resize(, 2) = Split(vntKey, "|")
.Cells(i, 5).Resize(, 12) = objDic(vntKey)
i = i + 1
Next
End With
Application.ScreenUpdating = True
Set objDic = Nothing
End Sub

Anzeige
AW: Mehrere Tabellen zusammenführen
01.11.2017 17:13:16
onur
"denn Onur überschreibt die Quell-Daten" -
In welcher Zeile werden denn bitteschön irgendwelche Quelldaten überschrieben?
Sorry, verwechsellt
01.11.2017 17:43:56
Christian
hallo Omur,
hab ich verwechselt, sorry.
Richig ist:
denn Daniel überschreibt die Quell-Daten und Onur hat 5 Datensätze vergessen.
Dafür läuft dein Code aber gute 10 Sekunden statt 0,1
Grüße
Christian
AW: Sorry, verwechsellt
01.11.2017 17:45:13
onur
Welche 5 denn?
AW: Mehrere Tabellen zusammenführen
01.11.2017 17:35:24
onur
Weder ist das hier ein Wettbewerb, noch bekommst Du Geld oder irgend welche Fleißkärtchen für dein "Produkt", wenn es "ausgewählt" wird.
Also versuch nicht durch irgend welche Lügen bzw. schlampig recherchierten Behauptungen die "Konkurrenz" schlecht zu machen.
Halte dich einfach mal an das Motto von Dieter Nuhr:
"Wenn man keine Ahnung hat, einfach mal die Fresse halten (Dieter Nuhr)"
Anzeige
AW: Mehrere Tabellen zusammenführen
01.11.2017 18:03:02
KLE
Habt vielen Dank für Eure schnelle Unterstützung!!!
Werde es gleich nach dem Training heute Nacht ausprobieren und mich melden.
PS: Bitte keine Streitigkeiten. Es ist ein Forum, wo sich jeder gegenseitig hilft. Ganz getreu meinem Firmen-Motto: ...gemeinsam einfach mehr erreichen ;o)
Ich Danke und melde mich bis Freitag auf jeden Fall wieder!
Hoh, Brauner - nichts für Ungut
01.11.2017 18:11:03
Christian
mach dir keine Sorgen, ich sammle keine Fleißkärtchen - das machen andere hier.
Ich versuche lediglich, im Rahmen meiner Möglichkeiten, einen einigermaßen sauberen Code zu erstellen - das in erster Linie zum eigenen Training.
Und wenn mir dabei Fehler bei den Lösungen der anderen Antworter auffallen, weise ich darauf hin.
Ja, ich hab bei meiner Antwort Omur und Daniel verwechelt - siehe oben.
Grüße
Christian
Anzeige
AW: Hoh, Brauner - nichts für Ungut
01.11.2017 18:17:05
onur
Weißt du, ich bin froh, wenn man mich auf Fehler hinweist, ich bin ja auch nicht perfekt.
Aber wenn du statt MICH drauf hinzuweisen,KLE anschreibst und IHM erzählst, daß die beiden anderen Fehler haben, hat das einen üblen Beigeschmack, denn das Beurteilen der Vorschläge sollte man KLE überlassen.
Aber sonst - Nix für Ungut.
ja, da hast du recht, Omur ...
01.11.2017 18:37:44
Christian
... das hätte ich besser formulieren müssen.
Sorry about that.
Falls du noch nach den fehlenden Datensätzen suchst:
- Boomgaarden, Julian
- Paschke, Janik
- Remme, David
- Rumler, Marcel
- Tönnies, Falco
Grüße
Christian
Anzeige
AW: ja, da hast du recht, Omur ...
01.11.2017 18:44:57
onur
Hi Christian,
Ach die!
Ich weiss, sind Waisenkinder, die tauchen in der Original-Tabelle (ganz links) nicht auf, deswegen habe ich sie auch weggelassen. Bringt ja nicht viel, wenn man z.B. die Anzahl der roten Karten kennt, aber sonst gar keine Daten von dem Spieler hat.
Muss sich KLE mal dazu äussern, wie er es gerne hätte.
Gruß
Onur
AW: ja, da hast du recht, Omur ...
01.11.2017 19:16:09
Daniel
nunja, dazu hat sich KLE schon geäußert.
das steht im Blatt "Statistik" rechts:
"Herausforderung?
Hier sollen am Ende "ALLE" Spieler aufgeführt werden, mit den jeweiligen Daten aus den einzelnen Tabellen.
Da einige Spieler, keine Tore werfen, aber Zeitstrafen erhalten können, müssen alle Spielernamen aus den
einzelnen Tabellen berücksichtigt werden.
"
da davon auszugehen ist, dass das was für Zeitstrafen gilt, eben auch für alle anderen Straffformen gilt, müssen hier eben auch die Rotsünder, die noch keine Tore geschossen haben, gelistet werden.
Gruß Daniel
Anzeige
AW: Tausche ein "n" für ein "m"
01.11.2017 20:00:29
Gerd
Hi,
kann passieren, hast ja Stress. :-)
cu
Gerd
AW: Hoh, Brauner - nichts für Ungut
01.11.2017 18:30:20
Daniel
Das Überschreiben der Quelldaten ist kein Fehler, sondern Absicht, weil ich davon ausgehe, dass die Quelldaten nach dem Zusammenfassen sowieso nicht mehr benötigt werden.
Deswegen habe ich in meinem Beitrag ja auch explizit darauf hingewiesen und das solltest du auch gelesen haben!!!
Ich werden jetzt deinen Code nicht prüfen, aber als nachteilig würde ich empfinden, dass er jedesmal umgeschrieben werden muss, wenn sich die Tabellenstruktur ändert, dh wenn neue Tabellen hinzukommen oder andere wegfallen, oder wenn in den einzelnen Tabellen Spalten hinzukommen oder wegfallen.
Bei meinem Code ist lediglich wichtig, dass die ersten 3 Spalten einer Tabelle mit Rang, Name und Verein belegt sind und die einzelnen Tabellen mit einer Leerspalte getrennt sind.
Wenn das gegeben ist, dann bearbeitet mein Code jede beliebige Tabellenstruktur, egal wieviele Tabellen vorliegen und welche Spalten sie haben.
und wie gesagt, wenn du schon andere Codes kommentierst, dann solltest du da wirklich sehr genau arbeiten und auch "Ross und Reiter" nennen und nicht einfach Behauptungen in den Raum stellen, sondern genau beschreiben, was fehlt.
Gruß Daniel
Anzeige
AW: Mehrere Tabellen zusammenführen
01.11.2017 22:33:05
KLE
Es scheint sehr gut zu funktionieren!
Vielen Dank für die Hilfe!
Sollte sich was im Detail ergeben, melde ich mich.
Sonnige Grüße Kay

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige