Tabellen Daten zusammenführen
 |
Betrifft: Tabellen Daten zusammenführen
von: Herbert
Geschrieben am: 01.08.2014 10:55:33
Hallo zusammen,
dachte das Thema wurde schon öfters behandelt leider finde ich aber keine Lösung die mir genau bei diesem Problem helfen kann:
Ich habe 10 Tabellen mit Namen. Diese möchte ich vergleichen lassen und in einer 11ten Tabelle untereinander ausgeben lassen ohne Duplikate.
hört sich nicht schwer an, finde aber im Moment einfach keine passende Lösung.
Grüße, Herbert
Betrifft: Konsolidieren ...
von: neopa C (paneo)
Geschrieben am: 01.08.2014 11:09:34
Hallo Herbert,
... dies könnte Dir weiterhelfen. Dazu sieh mal hier: http://www.online-excel.de/excel/singsel.php?f=100
Gruß Werner
.. , - ...
Betrifft: AW: Konsolidieren ...
von: Herbert
Geschrieben am: 01.08.2014 11:20:15
Danke für den Link. Darauf bin ich auch schon gestoßen. Hätte vielleicht erwähnen sollen, dass ich das am liebsten mit einem VBA machen würde da ich des öfteren eine Liste dazu bekomme.
Der Aufbau ist so:
1. Zusammenfassung
2. Liste1
3. Liste2
...
Nun stehen jeweils in den Listen Namen(mit Leerzeichen) untereinaner also Hans Mueller, Guenther Schuh usw.
Dies ist in jeder Liste so. In Zusammenfassung sollte dann jeder Name der je in einer Liste vorkam genau ein mal drin stehen.
Viele Grüße, Herbert
Betrifft: VBA-Lösung gesucht ... Thread offen owT
von: neopa C (paneo)
Geschrieben am: 01.08.2014 11:22:54
Gruß Werner
.. , - ...
Betrifft: Weil ich es grad in der Hand hab
von: Jack_d
Geschrieben am: 01.08.2014 11:57:29
Ich hab einst eine vergleichbare Lösung erstellt
die Sammelt aus allen Blättern die DAten und fügt diese Dann in einem Summary zusammen.
Du müsstest in deinem Fall die Kriterien (Ws-Auswahl ; Bereiche) anpassen
und weitergehend deinen Duplikatefilter einrichten. Dazu gibt es aber bereits hunderte Lösungen im Netz.
Sub Raumbuch_erstellen()
Dim Datensammler As Variant
Application.ScreenUpdating = False
Set WB = ActiveWorkbook
blaetter = BlaetterF - 1
DatenLauf = 0
If blaetter <= 0 Then Exit Sub
ReDim Datensammler(1 To 4, 0 To blaetter)
''Sammeln
For Each WS In WB.Worksheets
If IsNumeric(Left(WS.Name, 1)) Then
Datensammler(1, DatenLauf) = WS.Cells(5, 8) 'FABname
Datensammler(2, DatenLauf) = WS.Cells(6, 8) 'Sub-Titel
Datensammler(3, DatenLauf) = WS.Name 'Blattname
Datensammler(4, DatenLauf) = WS.Range("B10:H51").Value 'Räume
DatenLauf = DatenLauf + 1
Else
End If
Next WS
If Blattpruefen("Raumbuch") = False Then
Else
Application.DisplayAlerts = False
Worksheets("Raumbuch").Delete
Application.DisplayAlerts = True
End If
WB.Worksheets.Add Before:=Sheets(1)
ActiveSheet.Name = "Raumbuch"
'' Eintragen
With Worksheets("Raumbuch")
For i = 0 To UBound(Datensammler, 2)
On Error GoTo errorhdl
LZeile = .Cells(Rows.Count, 8).End(xlUp).Row
.Cells(LZeile, 1).Resize(41, 7) = Datensammler(4, i)
AlZeile = .Cells(Rows.Count, 8).End(xlUp).Row
For Awerte = 1 To 41
.Cells(AlZeile + Awerte, 8) = Datensammler(1, i)
.Cells(AlZeile + Awerte, 9) = Datensammler(2, i)
.Cells(AlZeile + Awerte, 10) = Datensammler(3, i)
Next Awerte
Next i
End With
Exit Sub
errorhdl:
MsgBox "Fehler in Zeile " & EintragZeile
Resume Next
End Sub
 |
Betrifft: AW: Weil ich es grad in der Hand hab
von: Herbert
Geschrieben am: 01.08.2014 12:47:45
Wow, super. Vielen Dank. Werde es mir jetzt gleich mal anschauen.
Betrifft: AW: Weil ich es grad in der Hand hab
von: Herbert
Geschrieben am: 01.08.2014 14:13:30
Wow, super. Vielen Dank. Werde es mir jetzt gleich mal anschauen.
Betrifft: AW: Weil ich es grad in der Hand hab
von: Herbert
Geschrieben am: 01.08.2014 14:16:09
OK, leider bin ich dafür noch zu ungeübt um den Code richtig interpretieren zu können. Hab mich jetzt mal daran gemacht und selber was zusammengeschrieben. Leider klappt das nicht so ganz:
'Insert names from all sheets
WS_Count = ActiveWorkbook.Worksheets.Count
For I = 5 To WS_Count
lastRowCalc = ActiveWorkbook.Sheets("calc").UsedRange.Rows.Count
lastRow = ActiveWorkbook.ActiveSheet.UsedRange.Rows.Count
ActiveWorkbook.Worksheets(I).Range("A1:A" & lastRow).Copy
Sheets("calc").Range("A" & lastRowCalc + 1).PasteSpecial xlPasteValues
Next I
'Delete duplicate entries
Sheets("calc").Select
Columns("A:A").Select
ActiveSheet.Range("A:A").RemoveDuplicates Columns:=1, Header:=xlNo
Leider bleibt die Liste auf dem Blatt calc leer, anstatt alle Namen untereinander anzuzeigen :(
Betrifft: AW: Weil ich es grad in der Hand hab
von: Jack_D
Geschrieben am: 02.08.2014 13:19:09
Moin Moin
Also ich hab aufm Handy nur kurz drüber geschaut, aber ein Fehler liegt auf jeden fall im referenzieren.
In der Schleife musst du für die letzte Zeile auch die Tabellenblätter ansprechen .
Sonst kommt immer die letzte Zeile vom 1. aktiven was im Zweifel vermutlich calc ist .. Somit "0" ist und der Kopier Ränge leer bleibt.
Grüße
Betrifft: AW: Weil ich es grad in der Hand hab
von: Herbert
Geschrieben am: 04.08.2014 08:12:32
Oh ja danke. Leider funktioniert das Skript immer noch nicht. Er springt zwar zur letzten Zeile in calc aber fügt keine Werte ein. Könnte vielleicht noch einmal jemand drüber schauen?
Betrifft: AW: Weil ich es grad in der Hand hab
von: Robert
Geschrieben am: 04.08.2014 08:28:31
Hallo Jack_D
Herbert hats schon angesprochen, hier nochmal in Codeform:
lastrow = ActiveWorkbook.ActiveSheet.UsedRange.Rows.Count
Ersetzen durch:
lastrow = ActiveWorkbook.Worksheets(I).UsedRange.Rows.Count
oder noch besser durch:
lastrow = ActiveWorkbook.Worksheets(I).UsedRange.Specialcells(xlCellTypeLastCell).Row
Viele Grüße
Robert
Betrifft: AW: Weil ich es grad in der Hand hab
von: Herbert
Geschrieben am: 04.08.2014 08:36:37
Hallo Robert,
das habe ich bereits gemacht. Leider werden die Werte imme rnoch nicht eingefügt. Irgendetwas schein bei der Paste Funktion nicht zu stimmen?
Betrifft: AW: Weil ich es grad in der Hand hab
von: Robert
Geschrieben am: 04.08.2014 08:48:20
Hallo Herbert (sorry für die Verwechslung vorhin),
Setze mal einen Haltepunkt bei Beginn der For...Next Schleife und lasse den Code dann Schritt für Schritt arbeiten (F8 drücken für Einzelschritt).
So kommt man normalerweise schnell dahinter, was denn da nicht passt.
Ansonsten:
Ich arbeite ungern mit den "Klarnamen" von Zellen, wie sie in den normalen Formeln verwendet werden und benutze eigentlich nurnoch .Cells(Zeilennummer,Spaltennummer) zum Angeben von Zelladressen,Ranges etc. Finde ich irgendwie übersichtlicher, da man Nummernvariablen direkt übergeben kann und nicht mit ("A1:A" &lastrow) arbeiten muss.
Viele Grüße
Robert
 |
Betrifft: AW: Weil ich es grad in der Hand hab
von: Herbert
Geschrieben am: 04.08.2014 13:12:00
Hallo Robert, vielen Dank für den Hinweis. Habe den Fehler gefunden. Aus irgend einem Grund war die Variable zur Bestimmung der letzten Zeile falsch.
Werde wohl in Zukunft auch mit Cells arbeiten, ist in der Programmierung übersichtlicher. Etwas anderes jetzt aber leider noch: Ich bekomme immer einen 1004 Error wenn ich folgende Zeilen einfügen möchte (vorletzte Zeile):
lastRowCalc = ActiveWorkbook.Sheets("calc").Cells(Rows.Count, 1).End(xlUp).Row
For I = 3 To lastRowCalc
Sheets("Data1").Cells(I, 1) = "=IF(calc!A" & I - 2 & "<>"";calc!A" & I - 2 & ";"")"
Next I
Viele Grüße,
Herbert
Betrifft: AW: Weil ich es grad in der Hand hab
von: Robert
Geschrieben am: 04.08.2014 14:25:09
Hallo Herbert,
die alte Qual, Formeln via VBA zu schreiben.
Du musst alle Anführungszeichen, die in der Formel vorkommen, verdoppeln!
Da auf Fehlersuche zu gehen ist alles andere als meine Lieblingbeschäftigung :)
Keiner ist dir böse, wenn du einen neuen Thread aufmachst mit der Frage, wie denn diese IF Funktion in VBA auszusehen hat, damit sie funktioniert.
Viele Grüße
Robert
Betrifft: AW: Weil ich es grad in der Hand hab
von: Herbert
Geschrieben am: 04.08.2014 14:38:49
Hallo Robert,
vielen Dank. Nächstes Mal mache ich auch direkt einen neuen Thread auf. Konnte es lösen, indem ich (wie du schon geschrieben hast) die Anführungszeichen verdoppelt haben UND alle Semikolons durch Kommas ersetzt habe.
Viele Grüße,
Herbert
Beiträge aus den Excel-Beispielen zum Thema "Tabellen Daten zusammenführen"