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

DS aus 2 Blättern vereinen

DS aus 2 Blättern vereinen
24.06.2020 10:47:42
Fred
Hallo Excel,- VBA Experten,
Für eine "Ligaverwaltung" würde ich gerne die Daten aus zwei Tabellenblättern (entsprechend den Teams) in einem dritten Blatt zusammenführen.
Beispieldaten:
https://www.herber.de/bbs/user/138515.xlsb
Ich weis nicht, ob es erschwerend ist, dass die relevanten Daten (nach denen sich die Zusammenführung richtet) unterschiedlich in der Schreibweise sind (Groß,- Kleinschreibung).
Ich würde mich sehr freuen, dass wenn mal jemand auf die Beispieldatei schaut, mir entsprechende "Schleifen-Abarbeitung" per vba schreibt (und wenn genug Zeit, mir die einzelnen Schritte im Makro entsprechend kommentiert,- da ich diesen Vorgang sicherlich noch auf anderes anwenden möchte).
Mit freundlichen Gruß
Fred

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: DS aus 2 Blättern vereinen
24.06.2020 23:21:06
fcs
Hallo Fraed,
hier ein entsprechendes Makro
LG
Franz

Sub Zuordnung_erstellen()
Dim wksP As Worksheet
Dim wksZ As Worksheet
Dim zeiP As Long, zeiZ As Long
Dim sTeam As String
Dim bolArchiv As Boolean
Dim StatusCalc As Long
If MsgBox("Zuordnungs-Tabelle erstellen?", vbQuestion + vbOKCancel, "ZUORDNUNG") _
= vbCancel Then Exit Sub
With Application
.ScreenUpdating = False
StatusCalc = .Calculation
.Calculation = xlCalculationManual
End With
Set wksP = ActiveWorkbook.Worksheets("Plan")
Set wksZ = ActiveWorkbook.Worksheets("Zuordnung")
'in Zuordnung die Altdaten löschen
With wksZ
zeiZ = .UsedRange.Row + .UsedRange.Rows.Count - 1
If zeiZ >= 3 Then
.Range(.Rows(3), .Rows(zeiZ)).Clear
End If
End With
zeiZ = 3
With wksP
'Zeilen im Plan abarbeiten
For zeiP = 3 To .Cells(.Rows.Count, 1).End(xlUp).Row
'Daten in Zeile im Plan kopieren nach Zuordnung
.Range(.Cells(zeiP, 1), .Cells(zeiP, 7)).Copy wksZ.Cells(zeiZ, 1)
'Name Heim-Team in Kleinbuchstaben merken
sTeam = LCase(wksP.Cells(zeiP, 6).Text)
bolArchiv = False 'Merker, ob Daten im Archiv gefunden wurden setzen
'Daten Heim-Team aus Archiv übernehmen
Call Copy_aus_Archiv(sTeam, zeiZ:=zeiZ, wksZ:=wksZ, bolArchiv:=bolArchiv)
'Name Gast-Team in Kleinbuchstaben merken
sTeam = LCase(wksP.Cells(zeiP, 7).Text)
'Daten Gast-Team aus Archiv übernehmen
Call Copy_aus_Archiv(sTeam, zeiZ:=zeiZ, wksZ:=wksZ, bolArchiv:=bolArchiv)
If bolArchiv = False Then zeiZ = zeiZ + 1 'im Archiv keine Daten zu den Teans der  _
Paarung
Next zeiP
End With
With Application
.ScreenUpdating = True
.Calculation = StatusCalc
End With
End Sub
Sub Copy_aus_Archiv(sTeam As String, zeiZ As Long, wksZ As Worksheet, bolArchiv As Boolean)
'Team im Archiv suchen und Zeilen nach Zuordnung kopieren
Dim wksA As Worksheet
Dim zeiA As Long
Set wksA = ActiveWorkbook.Worksheets("Archiv")
With wksA
'Zeilen im Archiv abarbeiten
For zeiA = 3 To .Cells(.Rows.Count, 1).End(xlUp).Row
'Teamnamen vergleichen
If LCase(.Cells(zeiA, 1).Text) = sTeam Then
'Daten Zeile nach zuordnung kopieren
.Range(.Cells(zeiA, 1), .Cells(zeiA, 9)).Copy wksZ.Cells(zeiZ, 8)
'Zeilenzähler für Zuordnung erhöhen
zeiZ = zeiZ + 1
'Merker auf True setzen weil Team im Archiv gefunden
bolArchiv = True
End If
Next zeiA
End With
End Sub

Anzeige
Super! fcs/Franz
25.06.2020 08:25:31
Fred
Hallo Franz,
wirklich ganz große Klasse, wie du mein "Wunschergebnis" in VBA umgesetzt hast!!
Ich möchte ja noch weitere Daten nach diesen Prinzip zusammenführen und deine treffenden Kommentare zu den einzelnen Vorgängen in diesem Makro sind mir unglaublich hilfreich.
Ich habe in meiner Mappe eine Tabelle namens "Parameter". In Spalte "A" stehen die Teams (wie ich diese runtergeladen habe,- in Großbuchstaben.
In Spalte "B" steht in jeder Zeile die Funktion "GrossKlein"

Function GrossKlein(rng As Range) As String
Tx = Split(rng)
For i = 0 To UBound(Tx)
If Len(Tx(i)) > 3 Then Tx(i) = WorksheetFunction.Proper(Tx(i))
Next i
GrossKlein = Join(Tx, " ")
End Function
mit der die Teamnamen/Bezeichnungen (wenn mehr als 3 Buchstaben) entsprechend umgewandelt werden.
Wenn nun dein Makro beendet ist, lasse ich folgendes aufrufen;

Sub TeamsErsetzen()
Dim Zeile As Long, varSuchen, varErsetzen
Dim CalcStatus
Dim wksKrit As Worksheet, wksEx As Worksheet
Set wksKrit = ActiveWorkbook.Worksheets("Parameter")
Set wksEx = ActiveWorkbook.Worksheets("Zuordnung")
With Application
.ScreenUpdating = False
CalcStatus = .Calculation
.Calculation = xlCalculationManual
End With
With wksKrit
For Zeile = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
varSuchen = .Cells(Zeile, 1).Value
varErsetzen = .Cells(Zeile, 2).Value
With wksEx
With .Range(.Cells(2, 6), .Cells(.Rows.Count, 7).End(xlUp))
.Replace What:=varSuchen, replacement:=varErsetzen, LookAt:=xlWhole, _
MatchCase:=True
End With
End With
Next
End With
With Application
.ScreenUpdating = True
.Calculation = CalcStatus
End With
End Sub
Nun werden die Mannschaftsnamen/Buchstaben entsprechend auf der Tabelle "Zuordnung" ersetzt.
Franz, nochmals vielen, vielen Dank für deine Mühe und kompetente Arbeit!
Gruss
Fred
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige