Startseite Inhaltsverzeichnis Nutzungsbedingungen Datenschutz Impressum Weitere Informationen

CODE-SCHNIPSEL

Konsolidierung einer Tabellenspalte bei sonst gleichen Spalteninhalten

VBA und Makros • Codeschnipsel • Arbeitsblatt • Tabelle • Konsolidierung • Zusammenfassung • Komma

Ausgangslage ... Was tut der Codeschnipsel?

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.

VBAVBA Codeschnipsel
XLSQuelltext zur Verwendung mit Microsoft® Excel®

Der Quelltext ...

Option Explicit
Option Compare Text
' ****************************************************************
' Autor/en und Original-Quelltext unter:
' https://www.online-vba.de/vba_konsolidierung1.php
' Verwendung der Quelltexte auf eigene Gefahr!
' Es gelten die Nutzungsbedingungen von https://www.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.
Es gelten die Nutzungsbedingungen von Online-VBA.de.
TOTOP
ANZEIGE