Microsoft Excel

Herbers Excel/VBA-Archiv

Daten zusammenführen | Herbers Excel-Forum


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

Gruß
Jochen


  

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

Jochen


  

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


Beiträge aus den Excel-Beispielen zum Thema "Daten zusammenführen "