stschuck

Excel-Makro gesucht: Zusammenführen der verteilten Inhalte mehrerer markierter Zeilen in eine

Zwar kann ich Excel (2010) ganz gut bedienen, doch keine Makros schreiben. Hab schon viel gegooglet und ähnliche, aber keine genau passenden Lösungen gefunden.
Ich habe das Problem einer riesigen Excel-Tabelle mit ca. 6000 Zeilen und ungefähr 40 Spalten, die durch den Import vieler kleinerer Tabellen entstanden ist. Nun muß ich die über mehrere Spalten und Zeilen verteilten Informationen zu einem Produkt in einer Zeile zusammen fassen. Da im entscheidenden Feld, das mir anzeigt, welche Zeilen zusammen gehören sollen, Schreibfehler und Abweichungen vorkommen können, muss ich die Zeilen schon alle selbst anschauen und kann sie nicht automatisch vergleichen. Ich möchte daher die Zeilen, die zusammengeführt werden sollen, einfach markieren und dann das Makro ausführen, das alle Inhalte in die oberste der markierten Zeilen zusammenkopiert und die darunter stehenden löscht. Wichtig: Die Anzahl der Spalten darf sich auf keinen Fall verändern!
Beispiel:

a57cf109bc6f36dc93c9574f3706d625

Ich wäre dankbar für eine zeitsparende, einfache Lösung!
Vielen Dank
Stefan
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 209011

Url: https://administrator.de/forum/excel-makro-gesucht-zusammenfuehren-der-verteilten-inhalte-mehrerer-markierter-zeilen-in-eine-209011.html

Ausgedruckt am: 08.05.2025 um 10:05 Uhr

76109
76109 03.07.2013, aktualisiert am 04.07.2013 um 01:04:30 Uhr
Goto Top
Hallo stschuck!

Unter der Annahme, dass der markierte Bereich in Spalte A beginnt und nur ein Wert in Spalte A (Inhalt 0) steht. Ausserdem ab der 3. Spalte C nur ein Wert pro Spalte steht...

Unter obiger Annahme könnte es hiermit gehen (Code in Modul einfügen):
Option Explicit

Const iColMax = 40

Public Sub Zusammenfassen()
    Dim aValues As Variant, aNewValues(1 To 1, 1 To iColMax) As Variant
    Dim iRowValue As Long, iRowFirst As Long, iRowNext As Long, iRowLast As Long, r As Long, c As Long
    
    If Selection.Rows.Count < 2 Then
        MsgBox "Es müssen mindestens 2 Zeilen markiert sein!", vbInformation, "Hinweis...":  Exit Sub  
    End If
    
    aValues = Selection.Value
    
    iRowValue = GetRowValue(aValues)
    iRowFirst = Selection.Row
    iRowNext = iRowFirst + 1
    iRowLast = iRowFirst + Selection.Rows.Count - 1
    
    aNewValues(1, 1) = aValues(iRowValue, 1)
    aNewValues(1, 2) = aValues(iRowValue, 2)
    
    For r = 1 To UBound(aValues, 1)
        For c = 3 To iColMax
            If Not IsEmpty(aValues(r, c)) Then
                aNewValues(1, c) = aValues(r, c)
            End If
        Next
    Next
    
    Rows(iRowNext & ":" & iRowLast).Delete Shift:=xlUp  
    Cells(iRowFirst, 1).Resize(1, iColMax).Value = aNewValues
End Sub

'Array-Zeile mit Wert in Spalte A ermitteln  
Private Function GetRowValue(ByRef aValues) As Long
    Dim i As Long
    
   'Falls Spalte A leer, dann Wert für Spalte B aus 1.er Array-Zeile  
    GetRowValue = 1

    For i = 1 To UBound(aValues, 1)
        If Not IsEmpty(aValues(i, 1)) Then
            GetRowValue = i:  Exit For
        End If
    Next
End Function

Gruß Dieter
stschuck
stschuck 03.07.2013 um 11:58:50 Uhr
Goto Top
Hallo Dieter,
das sieht schon beeindruckend aus - allerdings bekomme ich die Fehlermeldung: "Laufzeitfehler 9" Index außerhalb des gültigen Bereiches für diese Code-Zeile

:aNewValues(1, 1) = aValues(iRowValue, 1).

Mache ich etwas falsch?
Danke für eine Korrektur.
Viele Grüße Stefan
76109
76109 03.07.2013 um 12:19:59 Uhr
Goto Top
Hallo stschuck!

Leider fehlt mir jetzt die Zeit für eine Korrektur, da ich gleich zur Arbeit muss...

Allerdings dürfte der Fehler auftreten, weil in Spalte A kein Wert steht?

Gruß Dieter
stschuck
stschuck 03.07.2013 um 12:31:27 Uhr
Goto Top
Hallo Dieter, ja, daran liegt's. In der Spalte A steht nur gelegentlich ein Wert. Ich kann aber prima damit arbeiten, wenn ich einfach die leeren betreffenden Zellen zwischenzeitlich mit einem Hilfszeichen fülle. Dann funktioniert's.
GANZ HERZLICHEN DANK - und gutes Arbeiten
Stefan.
76109
76109 04.07.2013 aktualisiert um 01:06:05 Uhr
Goto Top
Hallo Stefan!

Habe im Code (Codezeile 40) noch eine Korrektur eingefügt, wodurch die Spalte A auch Leer sein darf.

Die Korrektur hat folgende Auswirkungen:
Ist die Spalte A im markierten Bereich leer, dann wird der Wert für Spalte B aus der 1.en markierten Zeile übernommen.
Ist die Spalte A im markierten Bereich (beliebige Zeile) nicht leer , dann wird der Wert in Spalte A und der Wert für Spalte B aus der Zeile, in der die Spalte A einen Wert enthält übernommen.

Gruß Dieter