Betrifft: Daten zusammenführen
von: marcel
Geschrieben am: 04.02.2010 15:06:49
Hallo Experten!
Folgendes Problem bzw. folgende Herausforderung:
Es gibt verschiedene Datenbereiche in einem Tab.-Blatt, die aber nicht immer in allen Zeilen auch Datensätze enthalten (es gibt aber keine Leerzeilen zwischen Datensätzen; nur der Rest des Datenbereichs kann dann leer sein).
Datenbereich (DB1) A4 bis G500
Datenbereich (DB2) J4 bis P500
Die Datenbereiche sind identisch aufgebaut. Nun möchte ich die Zeilen mit Einträgen aus beiden Datenbereichen in einem anderen Tab.-Blatt zusammenführen. Dort im Bereich A1-G1000.
Wie kann ich das Zusammenführen hinbekommen?
Es sollen alle Datensätze aus dem DB1 beginnend mit A1 aufgelistet werden und wenn der Bereich keine Daten mehr führt sollen die Daten aus dem DB2 darunter aufgelistet werden.
Danke für eure Hilfe.
Marcel
Betrifft: AW: Daten zusammenführen
von: ludicla
Geschrieben am: 04.02.2010 15:15:06
Hallo Marcel,
aus Deinen kurzen Satzbeschreibung kann ich mir nicht viel zusammenreimen.
Kannst Du mal ne Musterdatei mit der Problemstellung laden ??
Gruss Ludicla.
Betrifft: AW: Daten zusammenführen
von: JoWE
Geschrieben am: 04.02.2010 15:41:50
Hallo Marcel,
einfach die beiden Bereiche nacheinander kopieren und einfügen geht nicht?
Mit VBA vlt. so:
Sub jupp() Dim sh1, sh2, sh3 As Object Set sh1 = ThisWorkbook.Sheets("DB1") Set sh2 = ThisWorkbook.Sheets("DB2") Set sh3 = ThisWorkbook.Sheets("Neu") Dim r1, r2 As Range Set r1 = sh1.Range("A4:G500") Set r2 = sh2.Range("J4:P500") sh1.Select r1.Copy Destination:=sh3.[A1] sh2.Select r2.Copy Destination:=sh3.Cells( _ sh3.[A1].End(xlDown).Row + 1, 1) sh3.Select End Sub
Betrifft: AW: Daten zusammenführen
von: marcel
Geschrieben am: 04.02.2010 15:53:24
nur einfügen ist nicht gut. es sind exemplarisch nun zwei bereiche - in echt sind es 10-15 bereiche. jeder kann max 500 zeilen haben, es können aber auch deutlich weniger sein. daher suche ich eine formellösung.
Betrifft: AW: Daten zusammenführen
von: Marcel
Geschrieben am: 04.02.2010 18:25:25
N'Abend.
So, nun mit einem Beispiel (stark verkürzt dargestellt):
https://www.herber.de/bbs/user/67772.xls
Ziel soll es sein, die Datensätze aus den verschiedenen Datenbereichen im Tab.-Blatt "Zusammenfassung" untereinander zusammenzuführen.
Problem ist, dass zwar immer ein fester Bereich in jedem Datenbereich (DB1, DB2 usw.) von Zeile 4 bis Zeile 500 ist, aber jeden Monat unterschiedlich viele Zeilen mit Daten gefüllt sind.
Bin gespannt auf eure Tipps. Das Ganze sollte möglichst per Formel ohne VBA gelöst werden.
Betrifft: AW: Daten zusammenführen
von: JOWE
Geschrieben am: 04.02.2010 20:56:24
Hallo Marcel,
so vieleicht:
Public sh1, sh2 As Object
Sub start() Dim i As Long Set sh1 = ThisWorkbook.Sheets("Tabelle1") Set sh2 = ThisWorkbook.Sheets("Zusammenfassung") For i = 1 To 255 Step 9 If sh1.Cells(4, i) <> "" Then Call Bereich_kopieren(sh1.range(sh1.Cells(4, i), _ sh1.Cells(500, i + 6)).Address) Else Exit Sub End If Next End Sub
Sub Bereich_kopieren(bereich) Dim ez As Long Dim rBer As range Set rBer = sh1.range(bereich) If sh2.[A1] = "" Then rBer.Copy Destination:=sh2.[A1] Else ez = sh2.[A65536].End(xlUp).Row + 1 rBer.Copy Destination:=sh2.Cells(ez, 1) End If If ez = 0 Then ez = 1 Call LeereZeilenLöschen(ez) End Sub
Sub LeereZeilenLöschen(ez) Dim tmp, x As Long Application.ScreenUpdating = False tmp = sh2.Cells.Find("*", sh2.Cells(ez, 1), , , xlByRows, xlPrevious).Row For x = tmp To ez Step -1 Do While Application.CountA(Rows(x)) = False Rows(x).EntireRow.Delete Loop Next x Rows(sh2.[A1].End(xlDown).Row & ":" & 65536).Delete lz = sh2.Cells(ez).End(xlDown).Row sh2.range(sh2.Cells(ez, 1), sh2.Cells(sh2.Cells(ez). _ End(xlDown).Row, 7)).Borders.LineStyle = xlNone End Sub
Betrifft: AW: Daten zusammenführen
von: Odje.K
Geschrieben am: 05.02.2010 16:21:43
Hallo Jochen,
toller Code.
Dazu noch eine Frage:"Wie setzt man nach jedem DB einen Unterstrich?"
Gruß
Odje
Betrifft: AW: Daten zusammenführen
von: JOWE
Geschrieben am: 05.02.2010 20:28:13
Hallo Odje,
was meinst Du?
Gruß
Jochen
Betrifft: AW: Daten zusammenführen
von: JOWE
Geschrieben am: 05.02.2010 21:18:51
meintest Du dies:
Sub LeereZeilenLöschen(ez) Dim tmp, x As Long Application.ScreenUpdating = False tmp = sh2.Cells.Find("*", sh2.Cells(ez, 1), , , xlByRows, xlPrevious).Row For x = tmp To ez Step -1 Do While Application.CountA(Rows(x)) = False Rows(x).EntireRow.Delete Loop Next x Rows(sh2.[A1].End(xlDown).Row & ":" & 65536).Delete lz = sh2.Cells(ez).End(xlDown).Row sh2.range(sh2.Cells(ez, 1), sh2.Cells(sh2.Cells(ez). _ End(xlDown).Row, 7)).Borders.LineStyle = xlNone lz = sh2.[A1].End(xlDown).Row 'Die letzte Zeile des Bereiches erhält eine 'Trennungslinie' With sh2.range(sh2.Cells(lz, 1), sh2.Cells(lz, 7)).Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With End Sub
Betrifft: AW: Daten zusammenführen
von: Odje.K
Geschrieben am: 06.02.2010 09:34:31
Moin, moin Jochen,
genau so.
Danke für die die Änderung.
Wünsche noch ein schönes Wochenende.
Gruß
Odje