Spalten-Konsolidierung identischer Zeilen

VBA und Makros
Codeschnipsel
Arbeitsblatt
Tabelle
Konsolidierung
Zusammenfassung
Komma
Excel

Ausgangslage - Was tut dieser Code-Schnipsel?

Folgende Situation: Sie haben eine Gerätetabelle und möchten gerne alle Seriennummern eines Gerätetyps mit einem Komma getrennt in der Spalte Seriennummern haben.

Zur Verdeutlichung einmal die Tabelle1 (Ausgangslage) und die gewünschte Auswertungstabelle (Ergebnis).

  A B C D E F
 1  Name Hersteller Typ Preis Seriennummern           
 2  Maus Hersteller A 1 50 Euro A223B442  
 3  Maus Hersteller A 1 50 Euro A223B442  
 4  Monitor Hersteller B 1 199 Euro X333J598  
 5  Gehäuse Hersteller C 2 99 Euro F456Z662  
 6  Gehäuse Hersteller C 2 99 Euro F456Z667  
 7  Tastatur Hersteller A 1 29 Euro T661H532  
 8  Tastatur Hersteller A 1 29 Euro T662H522  

Und das Ergebnis nach dem Konsolidierungsmakro sollte so aussehen:

  A B C D E F
 1  Name Hersteller Typ Preis Seriennummern           
 2  Maus Hersteller A 1 50 Euro A223B442, A223B442  
 3  Monitor Hersteller B 1 199 Euro X333J598  
 4  Gehäuse Hersteller C 2 99 Euro F456Z662, F456Z667  
 5  Tastatur Hersteller A 1 29 Euro T661H532, T662H522  
 6             

Für diese Konsolidierung finden Sie folgend ein Beispielmakro.

Der Quelltext

Option Explicit
Option Compare Text
' Original-Quelltext unter: https://www.online-vba.de/spalten-konsolidierung-identischer-zeilen
' Express-Hilfe für VBA unter https://www.online-vba.de/vba-expresshilfe
' Es gelten die Nutzungsbedingungen von Online-VBA.de

Public Sub OVBAde_TabellenKonsolidierung()
  Dim lQuellZeile As Long
  Dim lZielZeile As Long
  Dim lSpalte As Long
  Dim lSuchZeile As Long
  Dim oQuelle As Object
  Dim oZiel As Object
  Dim bFlag As Boolean
  Dim sVergleichQuelle As String
  Dim sVergleichZiel As String
    
    Set oQuelle = Sheets("Tabelle1")
    
    Set oZiel = Sheets.Add
    lZielZeile = 2
    
    Application.ScreenUpdating = False 'Flackern ausschalten
    
    'Überschriften eintragen
    For lSpalte = 1 To 5
        oZiel.Cells(1, lSpalte).Value = oQuelle.Cells(1, lSpalte).Value
    Next lSpalte
    
    'Konsolidierung
    For lQuellZeile = 2 To oQuelle.UsedRange.Rows.Count + oQuelle.UsedRange.Row - 1
    
        bFlag = False
        
        'Prüfen ob Zeile schon vorhanden!
        For lSuchZeile = 2 To oZiel.UsedRange.Rows.Count + oZiel.UsedRange.Row - 1
            sVergleichQuelle = ""
            sVergleichZiel = ""
            For lSpalte = 1 To 4
                sVergleichQuelle = sVergleichQuelle & CStr(oQuelle.Cells(lQuellZeile, lSpalte).Text)
                sVergleichZiel = sVergleichZiel & CStr(oZiel.Cells(lSuchZeile, lSpalte).Text)
            Next lSpalte
            If LCase(Trim(CStr(sVergleichQuelle))) = LCase(Trim(CStr(sVergleichZiel))) Then
                bFlag = True
                Exit For
            End If
        Next lSuchZeile
        
        'Prüfergebnis entscheidet ob bereits vorhanden oder eine neue Zeile angelegt werden muss
        If bFlag = True Then 'Bereits vorhanden also nur anhängen
            oZiel.Cells(lSuchZeile, 5).Value = oZiel.Cells(lSuchZeile, 5).Text & _
                ", " & oQuelle.Cells(lQuellZeile, 5).Text
        Else 'Zeile als neu unten anhängen
            For lSpalte = 1 To 5
                'Inhalt übertragen ein führendes ' erzwingt die Textübernahme!!!
                oZiel.Cells(lZielZeile, lSpalte).Value = _
                    CStr("'" & oQuelle.Cells(lQuellZeile, lSpalte).Value)
            Next lSpalte
            lZielZeile = lZielZeile + 1
        End If
    Next lQuellZeile
    
    'Aufräumen
    Application.ScreenUpdating = True
    Set oZiel = Nothing
    Set oQuelle = Nothing
End Sub

Anmerkungen und Hinweise

Dieser Codeschnipsel wurde geschrieben von Marc Wershoven im Jahr 2013.
Die Nutzung erfolgt auf eigene Gefahr. Bitte denken Sie immer zuerst an eine ausreichende Datensicherung. Wir können keinen kostenlosen Support anbieten. Es gelten unsere Nutzungs­bedingungen.


So einfach läuft unsere VBA-Expresshilfe ab

1
Senden Sie uns Ihre Office-Datei oder Ihren VBA-Code (gerne anonymisiert) mit einer kurzen Problembeschreibung oder Ihrem Erweiterungswunsch per E-Mail.
2
Wir analysieren Ihr Anliegen schnell und schicken Ihnen umgehend (tagsüber meist innerhalb von 1-2 Stunden) ein Festpreis-Angebot.
3
Nach Ihrer Zustimmung lösen wir Ihr Problem (meist noch am gleichen Tag) oder setzen Ihre Erweiterung zuverlässig um – inklusive verständlicher Dokumentation der durchgeführten Maßnahmen.

Jetzt kontaktieren!







Mit einem * gekennzeichnete Eingabefelder sind Pflichtfelder.
Datenschutzhinweise zum Kontaktformular: Die von Ihnen im Kontaktformular bereitgestellten Daten werden ausschließlich zur Bearbeitung Ihrer Anfrage verwendet und nicht ohne Ihre Zustimmung an Dritte weitergegeben. Ihre Daten werden nur für den Zeitraum gespeichert, der zur Bearbeitung Ihrer Anfrage erforderlich ist. Weitere Hinweise zum Datenschutz finden Sie in unserer Datenschutzerklärung.
Hinweis: Für die vollständige Funktion dieser Website ist JavaScript erforderlich.
Bitte aktivieren Sie JavaScript in Ihrem Browser, um alle Inhalte und interaktiven Funktionen nutzen zu können.